麻雀虽小五脏俱全 现代C++思想 值得推敲
发布日期:2021-10-01 03:38:23 浏览次数:15 分类:技术文章

本文共 2352 字,大约阅读时间需要 7 分钟。

真正的C++

(1)不提倡指针

(2)提倡数据抽象,提倡使用类

(3)提倡使用库

------<<C++沉思录>>

本文中问题的解决很好的体现了以上几点,如果不想学习C++误入歧途,陷入方言.请仔细研读本程序的实现思路,虽然它不是本人原创.

// 问题条件:文本文件中有如下学生数据

// 要求:对文本中的数据按成绩排序,之后输出到result.txt文件中,同时显示结果

// 解决思路:将文件中的数据读入到vector对象vectStu中进行排序,vector必须盛放一行数据.

//创建student类,用其对象作为vector的元素.每次从文件中读一行到string的临时对象line中.

//用string流对象从line中读取此行的三个数据(学号,姓名,分数)到三个临时变量中.

//用这三个临时对象初始化一个student对象,将这个初始化的对象放入vectStu中.

//为利用sort对vectStu排序,需要student类支持operator<操作符重载.

//最后将vectStu的内容输出到终端,输出到文件.此时对vectStu中的每个student,为获取其私有

//成员,要求student类提供只读接口.

//完整实现

#include <iostream>

#include <fstream>
//#include <cstdlib>
//#include <cstdio>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>

using namespace std;

class Student

{
public:
Student();
Student ( string Number, string Name, int Score ): number( Number ), name( Name ), score( Score ){}
~Student (){};

int getScore() const{

return score;
}
string getNumber() const{
return number;
}
string getName() const{
return name;
}
bool operator<( const Student &Stu ) const{
return score < Stu.getScore();
}
private:
/* data */
string number;
string name;
int score;
};

void PrintVec( vector< Student > &vec ){

int i = 0;
for(vector<Student>::size_type i = 0; i < vec.size(); i ++ )
{
Student stu = vec[i];
cout<<"Number:"<<stu.getNumber()<<" "<<"Name:"<<stu.getName()<<" "<<"Score:"<<stu.getScore()<<endl;
}
}

void WriteResult( vector< Student > &vec ){

ofstream fout("result.txt");
int i = 0;
for(vector<Student>::size_type i = 0; i < vec.size(); i ++ )
{
Student stu = vec[i];
fout<<stu.getNumber()<<" "<<stu.getName()<<" "<<stu.getScore()<<"/n";
}
fout.close();
}

int main (int argc, char const* argv[])

{
ifstream fin("test.txt");
vector< Student > students;
string lineIterm("");
string num;
string name;
int score;
while( getline( fin, lineIterm ) ){
//cout<<lineIterm<<endl;
//以空格来分隔string
istringstream iss( lineIterm );
iss>>num;
iss>>name;
iss>>score;
Student stu( num, name, score );
students.push_back( stu );
}
PrintVec( students );
cout<<"begin sort......."<<endl;
sort( students.begin(), students.end() );
cout<<"end sort........."<<endl;
PrintVec( students );
fin.close();
WriteResult( students );
return 0;
}

/*

2004101 张大志 89

2004102 杨小敏 65
2004103 李兵 76
2004104 周星华 60
2004105 王小青 82
2004106 陈江 70
2004107 刘慧姗 85
2004108 张真 80
2004109 林华 70
2004110 郭云风 62

*/

注:代码参考CSDN博客,非本人原版.思想也是来自CSDN博客

转载地址:https://blog.csdn.net/iteye_18039/article/details/81971440 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Andrew Koenig 的一些建议 C++沉思录
下一篇:如何学好C++ 谈一下我个人的看法

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月24日 23时57分21秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

labview自动保存报表_基于LabVIEW的Excel报表的自动生成功能 2019-04-21
geotool 导出shp_Java 读取shape文件 2019-04-21
mysql 关联更新_MySQL UPDATE多表关联更新 2019-04-21
mysql call_mysql的call用法 call调用函数的例子 2019-04-21
python参数验证_参数验证,Python中的最佳实践 2019-04-21
python画多层网络_在pymn中修改多层网络图 2019-04-21
java net 安卓_android -------- java.net.UnknownServiceException 2019-04-21
java 密钥 aes 解密_Java中AES加密解密以及签名校验 2019-04-21
java树转化成图_Java 转换一组数据为树型数据 2019-04-21
java 底层ppt_Java 如何设置 PPT 中的形状排列方式 具体内容 2019-04-21
mysql更新第5条记录_MYSQL中添加、更新、删除数据 2019-04-21
mysql service5.7_Mysql5.7服务下载安装 2019-04-21
mysql查看线程完整执行命令_MySQL-查看运行的线程-SHOW PROCESSLIST 2019-04-21
mysql 更新数据 字符串_批量替换 MySQL 指定字段中的字符串 2019-04-21
web开发 mysql安装_mysqlinstallerwebcommunity5.7.21.0.msi安装图文教程 2019-04-21
mysql concat 整数型_MySQL 数字类型转换函数(concat/cast) 2019-04-21
mysql单元格函数是_MySQL常用内置函数 2019-04-21
mysql 怎么字段分裂_你可以分裂/爆炸MySQL查询中的字段吗? 2019-04-21
mysql server卸载出错_Mysql卸载问题Start Server卡住报错解决方法 2019-04-21
全国省市区 mysql_2017全国省市区数据库【含三款数据库】 2019-04-21