已过。
#include <iostream>
#include <map>
std::map<std::string, int> mp;
std::string getstring(std::string s, int &i){
std::string ans = "";
for(; i < (int)s.size() - 1; ++i){
if(s[i] == '+' || s[i] == '=') break;
ans += s[i];
}
return ans;
}
int getnum(std::string s, int &i){
int ans = 0;
for(; i < (int)s.size() - 1; ++i){
if(s[i] == '+' || s[i] == '=') break;
ans = (ans << 3) + (ans << 1) + (s[i] - '0');
}
return ans;
}
void solve(){
int line;
scanf("%d", &line);
while(line--){
std::string s;
std::cin >> s;
int i = 0;
std::string qwq = getstring(s, i);
++i;
if(s[i] <= '9' && s[i] >= '0'){
int IAKIOI = getnum(s, i);
//std::cout << IAKIOI << '\n';
mp[qwq] = IAKIOI;
++i;
if(i != (int)s.size() - 1){
if(s[i] <= '9' && s[i] >= '0'){
int FUCKCCF = getnum(s, i);
mp[qwq] += FUCKCCF;
}else{
std::string FUCKCCF = getstring(s, i);
mp[qwq] += mp[FUCKCCF];
}
}
}else{
std::string p1 = getstring(s, i);
mp[qwq] = mp[p1];
++i;
if(i != (int)s.size()-1){
if(s[i] <= '9' && s[i] >= '0'){
int FUCKCCF = getnum(s, i);
mp[qwq] += FUCKCCF;
}else{
std::string FUCKCCF = getstring(s, i);
mp[qwq] += mp[FUCKCCF];
}
}
}
}
mp.erase("");
for(auto i : mp){
std::cout << i.first << ' ' << i.second << '\n';
}
}
int main(){
int T = 1;
//scanf("%d", &T);
while(T--) solve();
return 0;
}
想知道为什么最后输出时多出一个空字符串来。
就是我为什么要加 mp.erase("")