求助
查看原帖
求助
852144
Loser_Syx楼主2023/6/22 06:27

已过。

#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("")

2023/6/22 06:27
加载中...