11.33
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
#include<map>
using std::ifstream;
using std::getline;
using std::string;
using std::istringstream;
using std::cout;
using std::endl;
using std::map;
auto buildMap(ifstream &map_file) {
map<string, string> trans_map;
string key, value;
while (map_file >> key && getline(map_file, value)) {
trans_map[key] = value.substr(1);
}
return trans_map;
}
auto transform(const string& word,const map<string, string> &trans_map) {
auto iter = trans_map.find(word);
if (iter != trans_map.end())
return iter->second;
return word;
}
void word_transform(ifstream &map_file,ifstream &input) {
auto trans_map = buildMap(map_file);
string line;
while (getline(input, line)) {
string word;
istringstream oneline(line);
bool firstword = true;
while (oneline >> word) {
if (firstword)
firstword = false;
else
cout << " ";
cout << transform(word, trans_map);
}
cout << endl;
}
}
int main() {
word_transform(ifstream("map.txt"), ifstream ("input.txt"));
return 0;
}
11.34
const string& transform(const string &s, const map<string, string> &m)
{
return m[s];
}
我们的map是const的,但是m[s]可能会改变map,所以代码会出现错误
11.35
用下标的时候。如果key多次出现,最后对应最后一个
如果用insert,key多次出现,最后对应第一个
11.36
dont understand