题目:
解答:
vector<string> str2vstr(string str, char split)
{
int start = 0;
vector<string> res;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == split)
{
res.push_back(str.substr(start, i - start));
start = i + 1;
}
}
res.push_back(str.substr(start, str.size() - start));
return res;
}
pair<char, int> parsestr2charmap(string str)
{
if (str.size() < 2)
{
return make_pair(0,0);
}
string str1;
int i = 2;
while (i < str.size())
{
str1.push_back(str[i]);
i++;
}
return make_pair(str[0], stoi(str1));
}
int main() {
string str;
getline(cin, str);
vector<string> allstr = str2vstr(str.substr(0, str.find('@')), ',');
vector<pair<char, int>> allmap;
for (int i = 0; i < allstr.size(); i++)
{
allmap.push_back(parsestr2charmap(allstr[i]));
}
do
{
if (str.find('@') == (str.size() - 1))
{
break;
}
vector<string> usedstr = str2vstr(str.substr(str.find('@') + 1, str.size() - str.find('@')), ',');
vector<pair<char, int>> usedmap;
for (int i = 0; i < usedstr.size(); i++)
{
usedmap.push_back(parsestr2charmap(usedstr[i]));
}
for (int i = 0; i < allmap.size(); i++)
{
for (int j = 0; j < usedmap.size(); j++)
{
if (allmap[i].first == usedmap[j].first)
{
allmap[i].second -= usedmap[j].second;
break;
}
}
}
} while (0);
int comm = 0;
for ( int i = 0; i < allmap.size(); i++)
{
if (allmap[i].second > 0)
{
if (comm != 0)
{
cout << ",";
}
else
{
comm = 1;
}
cout << allmap[i].first << ":" << allmap[i].second;
}
}
return 0;
}