容器和map的使用吧。。
#include <cstdio>
#include <cstring>#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
map<string,string> before,after;
vector<string> bef,aft;
void input(vector<string> &s,map<string,string> &Map)
{
string s1="",s2="";
char t;
while((t=getchar())!='}')
{
if(t!=':'&&t!=','&&t!='{'&&t!='\n'&&t!=' ')
s1+=t;
else if(t==':')
{
s.push_back(s1);
while((t=getchar())!=','&&t!='}'&&t!='\n'&&t!=' ')
s2+=t;
Map[s1]=s2;
if(t=='}')
break;
if(t==',')
s1.clear(),s2.clear();
}
}
}
int check1()
{
int mark=0;
for(int i=0;i<aft.size();i++)
{
if(!before.count(aft[i]))
{
if(!mark)
{
printf("+");
mark=1;
//printf("%s\n",aft[i]);
cout<<aft[i];
}
else
cout<<","<<aft[i];
}
}
if(mark)
{
printf("\n");
}
return mark;
}
int check2()
{
int mark=0;
for(int i=0;i<bef.size();i++)
{
if(!after.count(bef[i]))
{
if(!mark)
{
printf("-");
mark=1;
//prnitf("%s\n",bef[i]);
cout<<bef[i];
}
else
cout<<","<<bef[i];
}
}
if(mark)
{
printf("\n");
}
return mark;
}
int check3()
{
int mark=0;
for(int i=0;i<bef.size();i++)
{
if(after.count(bef[i]))
{
if(after[bef[i]]!=before[bef[i]])
{
if(!mark)
{
printf("*");
mark=1;
//printf("%s\n",bef[i]);
cout<<bef[i];
}
else
cout<<","<<bef[i];
}
}
}
if(mark)
{
printf("\n");
}
return mark;
}
int main (void)
{
int a1,a2,a3,t;
cin>>t;
getchar();
while(t--)
{
input(bef,before);
input(aft,after);
sort(bef.begin(),bef.end());
sort(aft.begin(),aft.end());
a1=check1();
a2=check2();
a3=check3();
if(!a1&&!a2&&!a3)
printf("No changes\n");
//printf("\n");
bef.clear();
aft.clear();
before.clear();
after.clear();
printf("\n");
}
return 0;
}