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