Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对文件中的字符串进行排序 我需要一个解决方案,使用C++基于姓氏对Unix PWD文件进行排序。文件的格式为用户名、密码、uid、gid、name、homedir、shell。所有字符都用冒号分隔符分隔。name字段包含名字和姓氏,两者都用空格分隔。我可以使用map对值进行排序,我正在发布我的代码。有人能建议我改进代码吗。此外,我无法看到文件中已排序的行 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; } }_C++ - Fatal编程技术网

对文件中的字符串进行排序 我需要一个解决方案,使用C++基于姓氏对Unix PWD文件进行排序。文件的格式为用户名、密码、uid、gid、name、homedir、shell。所有字符都用冒号分隔符分隔。name字段包含名字和姓氏,两者都用空格分隔。我可以使用map对值进行排序,我正在发布我的代码。有人能建议我改进代码吗。此外,我无法看到文件中已排序的行 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; } }

对文件中的字符串进行排序 我需要一个解决方案,使用C++基于姓氏对Unix PWD文件进行排序。文件的格式为用户名、密码、uid、gid、name、homedir、shell。所有字符都用冒号分隔符分隔。name字段包含名字和姓氏,两者都用空格分隔。我可以使用map对值进行排序,我正在发布我的代码。有人能建议我改进代码吗。此外,我无法看到文件中已排序的行 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; } },c++,C++,谢谢和问候 鼠标。因为文件的格式是固定的 username, password, uid, gid, first name(space)lastname, homedir, shell 维护一个std::map,键值为字符串,其中包含姓氏,值为行号 开始逐行读取文件,提取姓氏按行分割,然后在空间上分割第五个提取的部分 在地图中存储名称和行号 读取完完整的文件后,只需输出地图中提到的行号。映射包含按排序顺序排列的lat名称 用于拆分字符串 指 如果它只有几兆字节,你基本上可以把它读入内存,使用你

谢谢和问候


鼠标。

因为文件的格式是固定的

username, password, uid, gid, first name(space)lastname, homedir, shell
维护一个std::map,键值为字符串,其中包含姓氏,值为行号

开始逐行读取文件,提取姓氏按行分割,然后在空间上分割第五个提取的部分

在地图中存储名称和行号

读取完完整的文件后,只需输出地图中提到的行号。映射包含按排序顺序排列的lat名称

用于拆分字符串 指


如果它只有几兆字节,你基本上可以把它读入内存,使用你选择的On log n排序算法对它进行排序,然后把它写出来

基本上,编写一个代码段,以您想要的方式比较两行,并将其与标准库排序例程一起用于对数据进行排序。或者编写自己的排序例程,随便什么


如果你对如何处理千兆字节的数据感兴趣,可以从维基百科的文章中找到一个很好的出发点。

Define very large。对40MB文件和4GB文件进行排序的最佳方法是非常不同的,尽管对于pwd文件来说这两种文件都非常大?命令行排序实用程序可能很快就能解决您的问题。假设文件大小为几兆字节。我还想知道,如果它的数量级为几千兆,如何对其进行排序bytes@CarlNorum是的,我知道sort命令,但我只是在C或C++中尝试,Map在这里不起作用,因为在PC中,大多数姓氏保持不变。所以它不起作用。是否有其他数据结构进行排序?如何对映射中的字符串进行排序?仅仅通过改变行号?因为我不知道orderstd::map是排序容器。@mousey,默认情况下,std::map将元素按排序顺序存储在关键元素上,在您的情况下,这些元素是字符串。有关地图及其用法的更多详细信息,请参阅:@Pradeep地图应具有唯一名称。可能有相同的姓氏,对吗?那么现在在地图中我有了一个带有姓氏和行号的列表,那么我需要去那一行阅读并粘贴到开始吗?@mousey,你可以试试多重地图,它允许复制键值,这将帮助你
username, password, uid, gid, first name(space)lastname, homedir, shell