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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章