c++文件读写,vector用法,运算符重载

 
  


// ForChypre.cpp : 定义控制台应用程序的入口点。
//
/*

假定文本文件a1.txt中是某高校所有参加住宅小区挑房职工的信息,


请编写程序,读出文件中的内容,再按挑房的先后次序排队后将排序号和


姓名以文本方式存放到文件a2.txt中。排队原则:先按职称排,同职称按


分房工龄排,同工龄按年龄排。职称编号:校级干部 0教授、正处


级 1副教授、副处级 2讲师、科级 3其他
*/

#include
" stdafx.h "
#include
< iostream >
#include
< fstream >
#include
< sstream >
#include
< vector >
using namespace std;
class Info
{
public :
bool operator > ( const Info & info2)
{
if (turnTitle2number( this -> title) < turnTitle2number(info2.title) || this -> worktime > info2.worktime || this -> age > info2.age)
{
return true ;
}
else
return false ;
}
int turnTitle2number( string title)
{
string l[][ 3 ] = {{ " 教授 " , " 正处级 " },{ " 副教授 " , " 副处级 " },{ " 讲师 " , " 科级 " }};
for ( int i = 0 ;i < sizeof (l) / 3 * sizeof ( string );i ++ )
{
for ( int j = 0 ;j < 3 ;j ++ )
{
if (title == l[i][j])
return i; // 将职称转换成相应的数字,方便比较大小,职称越小则数字越大
}
}
}
public :
string pname; // 姓名
string title; // 职称
int age; // 年龄
int worktime; // 工龄
};

void fileRead( string fileName,vector < Info >& vec)
{
ifstream file(fileName);
string strTemp;
while ( ! file.eof()) // 如果不是文件末尾,则读出信息
{
Info info;
getline(file,strTemp);
// 一行信息
istringstream str(strTemp); // 分割一行信息,以空格为分隔符
string strWord; // 存储单个单词的单元
// vector <string>vect;
int i = 0 ;
while (str >> strWord)
{
switch (i)
{
case 0 :
info.pname
= strWord;
break ;
case 1 :
info.title
= strWord;
break ;
case 2 :
info.worktime
= atoi(strWord.c_str());
break ;
case 3 :
info.age
= atoi(strWord.c_str());
break ;
}
i
++ ;
/*
if(strWord!=""&&strWord!="\r")
vect.push_back(strWord);//存入vector中.
*/

}
vec.push_back(info);
}

}
void sort(Info info[], int len,vector < Info > & vect)
{
int i = 0 ;
for (vector < Info > ::iterator itr = vect.begin();itr != vect.end();itr ++ ) // itr 为指针
{
info[i]
=* itr;
i
++ ;
}
for ( int i = 0 ;i < len;i ++ )
{
for ( int j = i;j < len;j ++ )
{
if ( ! (info[i] > info[j]))
{
Info temp
= info[i];
info[i]
= info[j];
info[j]
= temp; // 交换
}
}
}
vect.clear();
for ( int i = 0 ;i < len;i ++ )
{
vect.push_back(info[i]);
// 入栈
}
}
void fileWrite( string & fileName,vector < Info >& vect)
{
ofstream file(fileName.c_str());
Info temp;
for (vector < Info > ::iterator itr = vect.begin();itr != vect.end();itr ++ )
{
temp
=* itr;
string str;
str.append(temp.pname);
str.append(
" " );
str.append(temp.title);
str.append(
" " );
char str2[ 100 ];
itoa(temp.worktime, str2,
10 ); // (源,目标字符串,进制)
str.append(str2);
str.append(
" " );
itoa(temp.age, str2,
10 );
str.append(str2);
str.append(
" \n " );
file
<< str;
}

}

void main()
{

string a = " a1.txt " ;
string b = " a2.txt " ;
vector
< Info > vect;
fileRead(a,vect);
// a读出
Info * techers = new Info[vect.size()];
sort(techers,vect.size(),vect);
fileWrite(b,vect);
// 写入b
}

转载于:https://www.cnblogs.com/evilmusclepeople/archive/2011/07/10/2102403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值