C++ Primer(第5版) 练习 11.33
练习 11.33 实现你自己版本的单词转换程序。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
cpp
/*************************************************************************
> File Name: ex11.33.cpp
> Author:
> Mail:
> Created Time: Mon 08 Apr 2024 09:00:00 AM CST
************************************************************************/
#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<map>
#include<iterator>
using namespace std;
map<string, string> buildMap(ifstream &map_file){
map<string, string> map;
string key;
string value;
while(map_file>>key && getline(map_file, value)){
if(value.size() > 1){
map[key] = value.substr(1);
}
else{
throw runtime_error("no rule for " + key);
}
}
return map;
}
const string &transform(const string &s, const map<string, string> &m){
auto it = m.find(s);
if(it != m.cend()){
return it->second;
}
else{
return s;
}
}
void txtTransform(ifstream &map_file, ifstream &input){
auto map = buildMap(map_file);
string txt;
while(getline(input, txt)){
istringstream stream(txt);
string word;
bool nonspace = true;
while(stream>>word){
if(nonspace){
nonspace = false;
}
else{
cout<<" ";
}
cout<<transform(word, map);
}
cout<<endl;
}
}
int main(){
ifstream map_file("map_file.txt");
ifstream input("input.txt");
txtTransform(map_file, input);
return 0;
}