排序文件中的字符串

mou*_*sey 0 c++

我需要一个解决方案,使用基于姓氏的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)

感谢和问候,

像老鼠.

Par*_*eep 5

由于文件的格式是固定的

username, password, uid, gid, first name(space)lastname, homedir, shell
Run Code Online (Sandbox Code Playgroud)

维护一个std :: map,其键值为字符串(包含姓氏,值为行号)

逐行开始读取文件,提取姓氏(用","拆分行,然后在空格上拆分第五个提取的部分).

将名称与行号一起存储在地图中

读取完整文件后,只需输出地图中提到的行号.(Map按排序顺序包含lat名称)

拆分字符串请参阅

用C++拆分一个字符串?