zoukankan      html  css  js  c++  java
  • C++自学笔记_单词转换map对象_《C++ Primer》

    今天在干《C++ Primer》第10章的时候似乎遇到了一点小瓶颈,翻回第8章吃了顿回头草。所以,老话说得好:欠下的总是要还滴 :)

    一个小程序,很简单:单词转换程序:程序输入两个文件,第一个文件包括了若干单词对,每对的第一个单词将出现在输入的字符串中,而第二个单词

    则是用于输出。本质上,这个文件提供的是单词转化的集合——在遇到第一个单词时,应该将之替换为第二个单词。第二个文件则提供了需要转换的文本。

    打个比方:如果单词转换文件的内容为:

    而要转换的文本是:

    Code:

    #include <iostream>
    #include <map>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        string fileName1("F:\file1.txt");       //file1
        string fileName2("F:\file2.txt");       //file2
        string fileName3("F:\file3.txt");       //file3
        map<string,string> trans_map;            //定义map对象,存储file1的内容
        string key,value;                        //键值对
        ifstream infile;                         //infile提供读文件操作,读file1.txt
        infile.open(fileName1.c_str());          //别忘了要把文件名转化为C风格字符串!
        if(!infile){
            cerr<<"error:enable open file:"<<fileName1<<endl;
            return 0;
        }else{
            cout<<"open file:"<<fileName1<<" success"<<endl;
        }
        while(infile>>key>>value){                //将file1中的键值对读出来存放在trans_map内
            trans_map.insert(make_pair(key,value));
        }
        infile.close();
        ifstream input;                           //input提供读文件操作,读file2.txt
        ofstream outfile;                         //outfile提供写文件操作,写入file3.txt
        input.open(fileName2.c_str());
        if(!input){
            cerr<<"error:enable open file:"<<fileName2<<endl;
            return 0;
        }else{
            cout<<"open file:"<<fileName2<<" success"<<endl;
        }
        outfile.open(fileName3.c_str());
        if(!outfile){
            cerr<<"error:enable open file:"<<fileName3<<endl;
            return 0;
        }else{
            cout<<"open file:"<<fileName3<<" success"<<endl;
        }
        string word;
        bool firstWord=true;                     //用来判断是否是第一个单词,用来处理空格的输出
        while(input>>word){                      //读单词(string)
            map<string,string>::const_iterator iter=trans_map.find(word);   //如果word存在,返回指向word的迭代器
            if(iter!=trans_map.end()){
                word=iter->second;               //迭代器是指向一个存在的元素,把word修改为file1.txt规定的对应的单词
                cout<<word<<endl;                //这个是输出在Console上看了玩的
            }
            if(firstWord){                       //第1个单词的情况
                firstWord=false;
                outfile<<word;
            }
            else{
                outfile<<" "<<word;              //从第2个开始就要在每个单词前面输出一个空格了
            }
            input.clear();
            outfile.clear();
        }
        outfile<<endl;
        return 0;
    }

    鲁棒性有待商榷,还需要多次优化。

    程序将在一个文本文件写入结果:

    睡一觉再动手 :)

  • 相关阅读:
    关于hive Metadata 使用 MsSQL
    hdp 2.06 安装备忘
    对于自我管理 ObjectContextManager的测试
    关于 Linq to EF 的内存泄漏问题
    使用过多的递归出现错误,“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生
    PowerShell 如何 远程连接【转】
    win7系统浏览器老是自动弹出网页怎么办
    win10如何深度清理C盘
    Win7电脑系统崩溃怎么解决?
    win7磁盘打不开如何解决
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4160811.html
Copyright © 2011-2022 走看看