#pragma once #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <iostream> #include <string> #include <cstring> #include <vector> #include <queue> #include <initializer_list> #include <algorithm> #include <unordered_set> #include <numeric> #include <unordered_map> #include <stack> #include <math.h> #include <map> #include <list> #include <set> #include <unordered_set> #include <sstream> #include <functional> #include <iomanip> #include <iterator> #include <fstream> //#include <time.h> #include <ctime> #include <cstdlib> #include <deque>
map<string, string> buildMap(ifstream &map_file) { map<string, string> trans_map; string key; string value; while (map_file>>key&&getline(map_file,value)) { if (value.size() > 1) trans_map.insert({ key,value.substr(1) }); // trans_map[key] = value.substr(1); else throw runtime_error("no rule for" + key); } return trans_map; } const string& transform(const string &s, const map<string, string> &m) { auto map_it = m.find(s); if (map_it != m.cend()) { return map_it->second; } else return s; } void word_transform(ifstream &map_file, ifstream &input) { auto trans_map = buildMap(map_file); string text; while (getline(input, text)) { istringstream stream(text); string word; bool firstword = true; while (stream>>word) { if (firstword) firstword = false; else cout << " "; cout << transform(word, trans_map); } cout << endl; } } int main() { ifstream f1("map.txt"); ifstream f2("trans.txt"); word_transform(f1, f2); return 0; }