給定一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);
}