首页 > 代码库 > C++自学笔记_单词转换map对象_《C++ Primer》

C++自学笔记_单词转换map对象_《C++ Primer》

今天在干《C++ Primer》第10章的时候似乎遇到了一点小瓶颈,翻回第8章吃了顿回头草。所以,老话说得好:欠下的总是要还滴 :)

 

一个小程序,很简单:单词转换程序:程序输入两个文件,第一个文件包括了若干单词对,没对的第一个单词将出现在输入的字符串中,而第二个单词

则是用于输出。本质上,这个文件提供的是单词转化的集合——在遇到第一个单词时,应该将之替换为第二个单词。第二个文件则提供了与要转换的文本。

 

打个比方:如果单词转换文件的内容为:

 

 

而要转换的文本是:

 

Code:

#include <iostream>#include <map>#include <fstream>using namespace std;int main(){    string fileName1("F:\\file1.txt");       //file1    string fileName2("F:\\file2.txt");       //file2    string fileName3("F:\\file3.txt");       //file3    map<string,string> trans_map;            //定义map对象,存储file1的内容    string key,value;                        //键值对    ifstream infile;                         //infile提供读文件操作,读file1.txt    infile.open(fileName1.c_str());          //别忘了要把文件名转化为C风格字符串!    if(!infile){        cerr<<"error:enable open file:"<<fileName1<<endl;        return 0;    }else{        cout<<"open file:"<<fileName1<<" success"<<endl;    }    while(infile>>key>>value){                //将file1中的键值对读出来存放在trans_map内        trans_map.insert(make_pair(key,value));    }    infile.close();    ifstream input;                           //input提供读文件操作,读file2.txt    ofstream outfile;                         //outfile提供写文件操作,写入file3.txt    input.open(fileName2.c_str());    if(!input){        cerr<<"error:enable open file:"<<fileName2<<endl;        return 0;    }else{        cout<<"open file:"<<fileName2<<" success"<<endl;    }    outfile.open(fileName3.c_str());    if(!outfile){        cerr<<"error:enable open file:"<<fileName3<<endl;        return 0;    }else{        cout<<"open file:"<<fileName3<<" success"<<endl;    }    string word;    bool firstWord=true;                     //用来判断是否是第一个单词,用来处理空格的输出    while(input>>word){                      //读单词(string)        map<string,string>::const_iterator iter=trans_map.find(word);   //如果word存在,返回指向word的迭代器        if(iter!=trans_map.end()){            word=iter->second;               //迭代器是指向一个存在的元素,把word修改为file1.txt规定的对应的单词            cout<<word<<endl;                //这个是输出在Console上看了玩的        }        if(firstWord){                       //第1个单词的情况            firstWord=false;            outfile<<word;        }        else{            outfile<<" "<<word;              //从第2个开始就要在每个单词前面输出一个空格了        }        input.clear();        outfile.clear();    }    outfile<<endl;    return 0;}

鲁棒性有待商榷,还需要多次优化。

 

程序将在一个文本文件写入结果:

 

睡一觉再动手 :)

C++自学笔记_单词转换map对象_《C++ Primer》