全是字符串相关处理,截取长度等相关操作的练习
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cctype> #include <cstring> #include <string> #include <sstream> #include <vector> #include <set> #include <map> #include <algorithm> #include <stack> #include <queue> using namespace std; int main() { ios::sync_with_stdio(false); int T; cin >> T; while (T--) { map<string, string> ma; string dictOld, dictNew; string ad[102], del[102], cha[102]; // 分别存储增加的,减少的,变化的关键字 cin >> dictOld >> dictNew; int addCount = 0; int deleteCount = 0; int changeCount = 0; int a = 0; while (dictOld.find(',', a + 1) < dictOld.size()) { // 这里截取方法比较重要 string s(dictOld, a + 1, dictOld.find(',', a + 1) - a - 1); string kay(s, 0, s.find(':', 0)); string value(s, s.find(':', 0) + 1, s.size() - s.find(':', 0)); ma.insert(pair<string, string>(kay, value)); a = dictOld.find(',', a + 1); } string s(dictOld, a + 1, dictOld.find('}', a + 1) - a - 1); string kay(s, 0, s.find(':', 0)); string value(s, s.find(':', 0) + 1, s.size() - s.find(':', 0)); if (kay.size()) { ma.insert(pair<string, string>(kay, value)); } a = 0; while (dictNew.find(',', a + 1) < dictNew.size()) { string s(dictNew, a + 1, dictNew.find(',', a + 1) - a - 1); string key(s, 0, s.find(':', 0)); string value(s, s.find(':', 0) + 1, s.size() - s.find(':', 0)); if (ma.find(key) == ma.end()) { ad[addCount++] = key; } else { string temp = ma.find(key)->second; if (temp != value) { cha[changeCount++] = key; } ma.erase(key); } a = dictNew.find(',', a + 1); } string s1(dictNew, a + 1, dictNew.find('}', a + 1) - a - 1); string key1(s1, 0, s1.find(':', 0)); string value1(s1, s1.find(':', 0) + 1, s1.size() - s1.find(':', 0)); if (key1.size()) { if (ma.find(key1) == ma.end()) { ad[addCount++] = key1; } else { string temp = ma.find(key1)->second; if (temp != value1) { cha[changeCount++] = key1; } ma.erase(key1); } } while (ma.begin() != ma.end()) { string temp = ma.begin()->first; del[deleteCount++] = temp; ma.erase(temp); } if (addCount == 0 && deleteCount == 0 && changeCount == 0) { cout << "No changes "; } else { if (addCount) { sort(ad, ad + addCount); cout << "+"; for (int i = 0; i < addCount; i++) { if (i) { cout << ","; } cout << ad[i]; } cout << endl; } if (deleteCount) { sort(del, del + deleteCount); cout << "-"; for (int i = 0; i < deleteCount; i++) { if (i) { cout << ","; } cout << del[i]; } cout << endl; } if (changeCount) { sort(cha, cha + changeCount); cout << "*"; for (int i = 0; i < changeCount; i++) { if (i) { cout << ","; } cout << cha[i]; } cout << endl; } } cout << endl; } return 0; }