我需要一个解决方案,使用基于姓氏的C++对unix pwd文件进行排序.该文件的格式是用户名,密码,uid,gid,name,homedir,shell.所有都是由冒号分隔符分隔.名称字段包含按姓氏分隔的名字,按空格分隔我可以使用地图对值进行排序,我发布了我的代码.有人可以向我建议我可以对我的代码做些改进吗.此外,我无法在我的文件中看到排序的行.
string line,item;
fstream myfile("pwd.txt");
vector<string> lines;
map<string,int> lastNames;
map<string,int>::iterator it;
if(myfile.is_open())
{
char delim =':';
int count =0;
while(!myfile.eof())
{
count++;
vector<string> tokens;
getline(myfile,line);
istringstream iss(line);
lines.push_back(line);
while(getline(iss,item,delim))
{
tokens.push_back(item);
}
cout<<tokens.size()<<endl;;
size_t i =tokens[4].find(" ");
string temp = tokens[4].substr(i,(tokens[4].size()-i));
cout<<temp<<endl;
lastNames.insert(pair<string,int>(temp,count));
tokens.clear();
}
myfile.seekg(0,ios::beg);
for(it=lastNames.begin();it!=lastNames.end();it++)
{
cout << (*it).first << " => " << (*it).second << endl;
int value=lastNames[(*it).first ];
myfile<<lines[value-1]<<endl;
cout<<lines[value-1]<<endl;
cout<<value<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,我有问题写入文件我无法看到排序的结果.
我的问题:
Can someone please explain me why I am unable to see the written results in the file!
Run Code Online (Sandbox Code Playgroud)
感谢和问候,
像老鼠.
由于文件的格式是固定的
username, password, uid, gid, first name(space)lastname, homedir, shell
Run Code Online (Sandbox Code Playgroud)
维护一个std :: map,其键值为字符串(包含姓氏,值为行号)
逐行开始读取文件,提取姓氏(用","拆分行,然后在空格上拆分第五个提取的部分).
将名称与行号一起存储在地图中
读取完整文件后,只需输出地图中提到的行号.(Map按排序顺序包含lat名称)
拆分字符串请参阅
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |