单词转换程序-练习关联型容器
来源:互联网 发布:最好听的网络歌曲推荐 编辑:程序博客网 时间:2024/05/19 23:26
一个单词转换的map
问题简介
功能:给定一个string,将它按照一定规则转换为另一个string
输入:
1_rule文件保存转换规则(每条规则由两部分组成:可能在输入文件中出现的单词和一个用来替代的短语)
2_input文件保存待转换的文本
输出:在标准输出中打印转换后的文本
思路分析
1 word_transform函数控制整个转换过程,接受两个参数,一个转换规则,一个带转换的文本
2 buildMap 函数:读入给定文件,建立单词转换映射
3 transform_word 函数:读入需要转换的string的引用和转换规则;如果给定string在map中,则返回转换后的string,否则直接返回原string
编写程序
主程序
string map_path = "/users/tubin/desktop/testForFstream/1_rule.txt";string input_path = "/users/tubin/desktop/testForFstream/2_input.txt";ifstream map_file(map_path);ifstream input(input_path);try { if (!map_file.is_open() || !input.is_open()) { throw runtime_error("file cannot open"); } word_transform(map_file, input); //直接调用转换程序} catch (runtime_error e) { cout << e.what() << endl;}
word_transform
//读取每一行,对每行中每一个单词进行映射void word_transform(std::ifstream &map_file, std::ifstream &input) { map<string, string> m_rule = build_map(map_file); //建立rule string line; while (getline(input, line)) { //对于每一行 istringstream iss(line); string record; bool bFirstWord = true; //控制空格输出 while (iss >> record) { //对于每一列 if (bFirstWord) { bFirstWord = false; } else { cout << " "; } string ss = transform_word(record, m_rule); cout << ss; } cout << endl; }}
build_map
//给定规则文件,建立mapstd::map<std::string, std::string> build_map(std::ifstream &map_file) { map<string, string> m_rule; string key; string value; //先读第一个string 作为key,再读后面一整行作为value while (map_file >> key && getline(map_file, value)) { if (value.size() > 1) { m_rule[key] = value.substr(1); //略过前导空格 } else { throw runtime_error("no rule for " + key); } } return m_rule;}
transform_word
//根据map,映射单词const std::string& transform_word(const std::string& s, const std::map<std::string, std::string>& m_rule) { auto iter = m_rule.find(s); if (iter != m_rule.end()) { return iter->second;// return m_rule[s]; //注意,只能对非const对象调用[]运算符 } else { return s; }}
小结
虽然题意简单,但还是能够考察基本功。其中istringstream的使用和读取key value的方法值得学习。
0 0
- 单词转换程序-练习关联型容器
- C++ Primer 关联容器 单词转换程序
- 使用map关联容器实现单词转换的程序
- c++primer关联容器中的“单词转换map程序”分析
- C++中map容器实现单词转换的程序
- C++ Primer : 第十一章 : 关联容器示例: 一个单词转换的map
- 【C++primer】第十章——关联容器——单词统计程序
- 用关联容器实现文本替换单词
- c++ primer 关联容器习题练习
- C++primer学习:关联容器练习(4)
- 关联式容器映射map练习
- C++Primer第五版 练习11.38-2单词转换程序(解答)
- 关联容器map应用-统计单词出现频率
- 关联型容器
- C++关联容器之小小程序
- linux下练习 c++ 关联式容器共性测试,使用
- linux下练习 c++ 关联式容器map特性
- linux下练习 c++ 关联式容器multimap特性
- JavaScript如何利用HTML DOM进行文档操作
- APACHE MINA之ECHO服务器
- 初学java之环境变量的配置
- 面试总结
- DataMining(2)_Data Preprocessing
- 单词转换程序-练习关联型容器
- 硬盘、数据库查找算法
- intellij 13新建javaweb项目并用tomcat 7启动
- 搭建golang环境
- bzoj 1040(树形DP)
- cornerStone查看日志出错:Could not contact repository to read the latest log entries
- 异常
- hdu1195 Open the Lock 广搜BFS 四维数组标记
- 现在的你需要一些外界刺激