C++Primer第11章 一个单词转换的map【程序】

来源:互联网 发布:vb施工管理 编辑:程序博客网 时间:2024/06/10 04:48

程序的功能:

从规则文件rule.txt读入转换的规则,生成map<string, string>

从待转换的文件file.txt读取文本,进行单词转换。


main.cpp

#include <iostream>#include <string>#include <map>#include <fstream>#include <sstream>using namespace std;//单词转换函数const string word_transform(ifstream &map_file, ifstream &input);//读入规则文件,生成对应的map映射map<string, string> buildMap(ifstream &map_file);//转换操作const string &transform(const string &word, const map<string, string> &map);int main() {    ifstream file_stream("D:\\Tao\\C_CPP_Projects\\aaC++\\files\\file.txt");   //待转换的文件    ifstream map_stream("D:\\Tao\\C_CPP_Projects\\aaC++\\files\\rule.txt");    //规则文件    const string result = word_transform(map_stream, file_stream);    cout << result;    return 0;}const string word_transform(ifstream &map_file, ifstream &input) {    string result = "";    map<string, string> trans_map = buildMap(map_file);    string text;    //每次读入一行待转换的文本    while(getline(input, text))    {        stringstream ss(text);        string word;        bool first_word = true;        //每次取这行文本中的一个单词        while(ss >> word)        {            if(first_word)                first_word = false;            else                result += " ";            //转换每个单词            result += transform(word, trans_map);        }        result += '\n';    }    return result;}//读入规则文件,生成对应的map映射map<string, string> buildMap(ifstream &map_file){    map<string, string> trans_map;  //保存转换规则的map    string key;     //键    string value;   //值    string line;    //读取第一个单词到key,剩下的所有内容读入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 &word, const map<string, string> &map){    auto map_iter = map.find(word);    if(map_iter != map.cend())        return map_iter->second;    else        return word;}




0 0
原创粉丝点击