zoukankan      html  css  js  c++  java
  • 用关联容器实现文本替换单词

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

    结果:





  • 相关阅读:
    TeX中的引号
    竖式问题
    蛇形填数
    开灯问题
    排列
    分数化小数
    子序列的和
    cookie
    post请求
    get请求
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6936685.html
Copyright © 2011-2022 走看看