1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include <string>
#include <vector>
#include <iostream>
typedef std::pair<std::string, std::string> str_pair;
typedef std::vector<str_pair> str_map;
typedef str_map::iterator map_iter;
typedef str_map::const_iterator map_citer;
std::string map_copy(const str_map& m, const std::string& str)
{
std::string out;
map_citer i;
for(size_t pos = 0; pos < str.size(); ++pos)
{
for(i = m.begin(); i != m.end() && str.find(i->first, pos) != pos; ++i);
if(i != m.end())
{
out.append(i->second);
pos += i->first.length() - 1;
continue;
}
out.append(1, str[pos]);
}
return out;
}
int main()
{
str_map map1;
str_map map2;
map1.push_back(str_pair("abc", "1"));
map1.push_back(str_pair("ab", "2"));
map1.push_back(str_pair("a", "3"));
map1.push_back(str_pair("1", "0"));
map2.push_back(str_pair("1", "0"));
map2.push_back(str_pair("ab", "2"));
map2.push_back(str_pair("a", "3"));
map2.push_back(str_pair("abc", "1"));
std::cout << map_copy(map1, "1abcaababcabababc") << '\n';
std::cout << map_copy(map2, "1abcaababcabababc") << '\n';
return 0;
}
|
01321221
02c322c222c |