c++ 单词转换 map对象
#include <map> #include <sstream> #include <fstream> #include <iostream> #include <string> #include <exception> using namespace std; ifstream& openfile(ifstream &in,const string &filename){ in.close();//close in case it was alrady open in.clear();//clear any existing errors in.open(filename.c_str());//open the file we were given //in要么于指定文件绑定起来了,要么处于错误条件状态 return in;//condition state is good if open succeeded } int main(int argc,char** argv) { map<string,string> trans_map; string key,value; ifstream map_file; if(!openfile(map_file,"transform.txt")){ throw runtime_error("no transformation file"); } //read the tansformation map and build the map while(map_file>>key>>value){ trans_map.insert(pair<string,string>(key,value)); } ifstream input; if(!openfile(input,"source.txt")){ throw runtime_error("no input file"); } string line;//hold each line from the input //read the text to transform it a line at a time while(getline(input,line)){ istringstream stream(line); //read the line a word at a time string word; //读字符串流 bool lineFirst=true;//controls whether a space is printed while(stream>>word){ //ok:the actual mapwork,this part is the heart of the program map<string,string>::const_iterator iter=trans_map.find(word); if(iter!=trans_map.end()){ //replace it by the transformation value in the map word=iter->second; } if(lineFirst){ cout<<word; lineFirst=false; }else{ cout<<" "<<word;//print space between words; } } cout<<endl;//done with this line of input } return 0; }
transform.txt文件内容:
em them cuz because gratz grateful i I nah no pos supposed sez said tanx thanks wuz was
source.txt文件内容:
nah i sez tanx cuz i wuz pos to not cuz i wuz gratz
程序执行输出: