面试题 统计文件中出现的单词及单词所在的行(C++ STL实现)

来源:互联网 发布:怎么用网络看电视 编辑:程序博客网 时间:2024/05/16 02:22

编译环境:VC6.0

代码很简单 就不添加注释了 呵呵

#include <IOSTREAM>#include <STRING>#include <VECTOR>#include <UTILITY>#include <MAP>#include <FSTREAM>using namespace std;int main(int argc,char **argv){if(argc<2){perror("WRONG PARAMETERS!\n");return -1;}string file_name = argv[1];fstream fp(file_name.c_str(),ios::in);string line;map<string,vector<int> > mymap;int line_num = 0 ;while(getline(fp,line)){line_num ++ ;while(!line.empty()){string substr;if(line.find(' ')==0){line=line.substr(1);continue;}if(line.find(' ')!=line.npos){char str1[200];memset(str1,0,200);memcpy(str1,line.c_str(),line.find(' '));line = line.substr(line.find(' '));substr.assign(str1);}else{substr = line;line="";}if(mymap.find(substr) != mymap.end()){map<string,vector<int> >::iterator it = mymap.find(substr);it->second.push_back(line_num);continue;}else{mymap.insert(make_pair(substr,vector<int>(1,line_num)));continue;}}}fp.close();for(map<string,vector<int> >::iterator it1 = mymap.begin();it1 != mymap.end();it1++){cout << it1->first<<"\t" <<ends;vector<int> vec = it1->second;for(vector<int>::iterator it2 = vec.begin();it2 != vec.end();it2++){cout << *it2 <<ends;}cout <<endl;}return 0;}