标签:
给定一个string,将它转换为另一个string。程序的输入是两个文件。第一个文件保存的是一些规则,用来转换第二个文件的文本。每条规则由两部分组成:一个可能出现在输入文件中的单词和一个用来替换它的短语。表达的含义是,每当第一个单词出现在输入中时,我们就将它替换为对应的短语。第二个输入文件包含要转换的文本。
简单来说,就是把rule文件中的对应单词替换,在target文件中进行实现。
思路:rule文件中有一个单词的简写后面是单词的全写,也就是说在target中找到简写的单词,根据rule中的单词进行替换。明显rule中的单词没有重复的,一个对应一个,这就想到了使用map这个关联矩阵来实现。
代码:
// transform.cpp : 定义控制台应用程序的入口点。 //给定一个string,将它转换为另一个string。程序的输入是两个文件。第一个文件保存的是一些 //规则,用来转换第二个文件的文本。每条规则由两部分组成:一个可能出现在输入文件中的单词和 //一个用来替换它的短语。表达的含义是,每当第一个单词出现在输入中时,我们就将它替换为对应 //的短语。第二个输入文件包含要转换的文本。 #include "stdafx.h" #include <iostream> #include <map> #include <string> #include <fstream> #include <sstream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string rule_path="rule.txt"; string tar_path="target.txt"; string fin_path="final.txt"; ifstream ruleFile(rule_path); ifstream tarFile(tar_path); ofstream finFile; finFile.open(fin_path); string text; map<string, string> mymap; if(ruleFile) { while(getline(ruleFile,text)) { string key, value; int n=text.find_first_of(" "); key=text.substr(0,n); value=text.substr(n+1); //cout<<key<<" "<<value<<endl; mymap.insert(make_pair(key,value)); } } if(tarFile) { while(getline(tarFile,text)) { //显然我需要把每个单词分开,然后跟rule文件中的key进行比较,把字符串中的单词分开 //istringstream是一个好方法。 istringstream is(text); string s; while(is>>s) { auto map_it=mymap.find(s); if(map_it != mymap.cend()) s=map_it->second; cout<<s<<" "; finFile<<s<<" "; } cout<<endl; finFile<<endl; } } system("pause"); return 0; }结果:
标签:
原文地址:http://blog.csdn.net/jiang111_111shan/article/details/46623703