导航

C++primer 练习11.33:实现你自己版本的单词转换程序

Posted on 2016-04-05 18:21  CSU蛋李  阅读(201)  评论(0编辑  收藏  举报
// 11_33.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
#include<map>
#include<sstream>
#include<fstream>
using namespace std;
//用map文件来建立一个要转换的字符串对应的转换成的字符串
map<string, string> buildMap(ifstream &map_file)
{
    map<string, string> ma;
    string word;
    string convert;
    while (map_file >> word&&getline(map_file, convert))
    {
        ma[word] = convert.substr(1);
    }
    return ma;
}

//返回一个字符串在map中对应的字符串,如果没有,则返回字符串本身
const string& transform(const string &s, const map<string, string> &m)
{
    auto ite = m.find(s);
    if (ite != m.end())
        return ite->second;
    else return s;
}

//单词转换函数,输入一个转换文件,和一个输入文件,打印转换后的文本
void word_transform(ifstream &map_file, ifstream &input)
{
    map<string, string> ma = buildMap(map_file);
    string line, word;
    while (getline(input,line))
    {
        istringstream is(line);
        bool wordtag = true;
        while (is >> word)
        {
            if (wordtag)
                wordtag = false;
            else cout << " ";
            cout << transform(word, ma);
        }
        cout << endl;
    }
}

int main()
{
    word_transform(ifstream("D:\\file\\11.3.6_map.txt"), ifstream("D:\\file\\11.3.6_input.txt"));
    return 0;
}