单词转换程序——使用map&文件读写操作

单词转换程序是C++primer中的题。

主要使用map来存储单词转换的规则;
以及文件读写的操作,比如ifstream & ofstream & istringstream

流程:
1、生成单词转换规则,其中使用ifstream读写文件,将每一行的单词拆分开,拆分出来的单词分别存放在map的key-value对;
2、读取input文件,拆分出每一个单词,调用tranform函数,将每一个单词转换成新单词,并且将新单词写入output文件中

具体的解析在代码中:
代码如下:

#include <iostream>
#include<fstream>
#include<sstream>
#include<map>
#include<string>

using namespace std;

map<string,string> buildmap(ifstream& map_file);
string tranform(map<string,string> &word_map,string& str_old);
void word_tranform(ifstream& map_file,ifstream& input,ofstream& output);


//生成map
map<string,string> buildmap(ifstream& map_file)
{
    map<string,string> word_map;
    string str;    //原字符串
    string sub;    //替换的字符串
    char buffer[128];
  //  int flag=1;

    if(map_file.is_open())
    {
        while(!map_file.eof())
        {
            map_file>>str;
            map_file.getline(buffer,128);

            int num=0;//空格的数目
            int i;
            for( i=0; i<128 && buffer[i] != '\n'; ++i)
            {
                if(buffer[i]==' ')
                {
                    num++;
                }
                else
                {
                    break;
                }
            }
            for( i=0; i<128 && buffer[i]!= '\n'; ++i)
            {
                buffer[i]=buffer[i+num];//去空格
            }
            buffer[i]='\0';

            sub=string(buffer);

            word_map[str]=sub;//插入map中

            cout<<str<<" ------ >  " << sub <<endl;
        }
    }
    return word_map;
}

//将单个字符替换成对应的字符
//返回新字符
string tranform(map<string,string> &word_map,string& str_old)
{
    string str_new;
    map<string,string>::iterator iter=word_map.find(str_old);
    if(iter != word_map.end())//如果发现有可替换的单词
    {
        str_new=iter->second;
        return str_new;
    }
    else{//没有发现有可替换的单词
        return str_old;
    }
}

//对整个文本进行替换
//输入参数:
//1、转换规则的输入文件流
//2、输入文件的输入文件流
//3、输出文件的输出文件流
void word_tranform(ifstream& map_file,ifstream& input,ofstream& output)
{
    map<string,string> word_map=buildmap(map_file);//调用函数,建立转换规则
    string str_new;  //存放新的word
    string str_old;  //存放旧的word
    char buf[128];
    while(!input.eof())
    {
        input.getline(buf,128);  //从文件流中读取一整行,存放在buf数组里
        istringstream stream(buf); //stream从buf中读取,是一个istringstream对象,用来处理一行中的每一个单词
        while(stream>>str_old)//stream读取到str_old中
        {
            str_new=tranform(word_map,str_old);//旧词替换成新的Word
            output<<str_new<<" ";//写入到输出文件中
        }
        output<<endl;//在每一行结束后,加一个换行(保证格式要相同)
    }
}
int main()
{
    ifstream map_file;
    map_file.open("map.txt",ifstream::in);
    ifstream input;
    ofstream output;
    input.open("input.txt",ifstream::in);
    output.open("output.txt",ofstream::out);

    word_tranform(map_file,input,output);
    return 0;
}
发布了159 篇原创文章 · 获赞 80 · 访问量 28万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览