C++Primer课后题11.33_单词本程序

给定一string,转换为另一个string。输入两个文件,文件1为替换规则,文件2为文本

*map<string, string> buildMap(ifstream &map_file) 
//将转换规则 创建为trans_map映射关系
{
    map<string, string> trans_map;
    string lineMap, key, value;
    while (getline(map_file, lineMap)) {//提取出每一行
        istringstream lineMap_in(lineMap);//提取每行的每个字
        //之所以要把前两个值分开,是为了处理空格
        lineMap_in >> key;//首个单词,用做map中的key
        lineMap_in >> trans_map[key];
        //第二个单词,为key对应value的第一个值
        while (lineMap_in >> value) {//提取出剩余的每个单词
            trans_map[key].append(" ");//eg:  bty -- by the way(the、way前面都要加上空格,使by the way及中间的空格为一个整体 
            trans_map[key].append(value);
        }
    }
    return trans_map;
}
void word_transform(ifstream &map_file, ifstream &input_file)
{
    string lineInput,word;
    //lineInput输入文件中的 一行 字符串,word输入文件中的每个字符
    auto trans_map = buildMap(map_file);
    while (getline(input_file, lineInput)) {
        istringstream lineInput_in(lineInput);
        while (lineInput_in >> word) {//提取出每个字
            if (trans_map.find(word) != trans_map.end())
            //可否应用规则
                word = trans_map[word];//用映射的值改变word
            cout << word << " ";
        }
        cout << endl;
    }
}
int main(int argc, char *argv[])
{   
    if (argc != 3)
        throw runtime_error("输入参数的个数有误!");
    ifstream map_file(argv[1]);
    ifstream input_file(argv[2]);
    if (!map_file)
        throw runtime_error("规则文件打开失败!");
    if (!input_file)
        throw runtime_error("输入文件打开失败!");
    word_transform(map_file, input_file);
}

你可能感兴趣的:(c++primer5)