c++:单词转换函数

c++ primer上的一个例子,输入一个转换映射文件和一个待转换文件,输出转换后结果。用c++的map来实现。

//建立映射函数
map<string, string> buildMap(ifstream &map_file) {
    map<string, string> trans_map;//保存转换规则的map
    string key; //要转换的单词
    string value;   //替换后的内容
    while (map_file >> key && getline(map_file, value)) {
        if (value.size() > 1)   //检测是否有转换规则
            trans_map[key] = value.substr(1);   //跳过前导空格
        else
        {
            throw runtime_error("no rule for" + key);
        }
    }
    return trans_map;
}
//转换函数
const string & transform(const string &s,const map<string,string> &m) {
    //实际的转换工作
    auto map_it = m.find(s);
    // 若单词在转换规则map中
    if (map_it != m.cend())
        return map_it->second;  //使用替换短语
    else
        return s;   //否则返回原string
}
// 单词转换函数
void word_transform(ifstream &map_file, ifstream &input)
{
    auto trans_map = buildMap(map_file);
    string text;    //保存输入中的每一行
    while (getline(input,text))
    {
        istringstream stream(text); //读取每一个单词
        string word;
        bool firstword = true;  //控制是否打印空格
        while (stream>>word)
        {
            if (firstword)
                firstword = false;
            else
            {
                cout << " ";    // 在单词间打印一个空格
            }
            cout << transform(word, trans_map); //打印输出
        }
        cout << endl;
    }
}

int main()
{
    ifstream f("map_file.txt");
    ifstream f2("input_file.txt");
    word_transform(f, f2);
    return 0;
}

映射文件map_file.txt:

brb be right back
k okay?
y why
r are
u you
pic picture
thk thanks!
l8r later

带转换文件input_file.txt:

where r u
y dont u send me a pic
k thk l8r

输出:

where are you
why dont you send me a picture
okay? thanks! later

你可能感兴趣的:(C++)