fork download
  1. #include<iostream>
  2. #include<string>
  3. #include<map>
  4.  
  5.  
  6.  
  7. int main() {
  8. int x, ans, unk;
  9. char sign;
  10. std::string s, cmnd;
  11. std::map<std::string, int> namtonum;
  12. std::map<int, std::string> numtonam;
  13. while(std::cin>>cmnd){
  14. if(cmnd == "def"){
  15. s.clear();
  16. std::cin>>s>>x;
  17. if(namtonum.count(s))namtonum.erase(s); /*если слово уже определено - удаляем его*/
  18. if(numtonam.count(x))numtonam.erase(x); /*аналогично поступаем с числом*/
  19. namtonum[s] = x; numtonam[x] = s;
  20. }
  21. else if(cmnd == "calc"){
  22. ans = 0; unk = 0; sign = '+'; /*в ans будем записывать значение выражения.*/
  23. while(sign != '='){
  24. s.clear();
  25. std::cin>>s;
  26. while(s == "+" || s == "-"){/*костыль на случай если первым идёт + или -*/
  27. if(s == "+")std::cin>>s;
  28. if(s == "-"){sign = '-'; std::cout<<s; std::cin>>s;}
  29. }
  30. if(namtonum.count(s)){
  31. if(sign == '-')ans -= namtonum[s];
  32. else ans += namtonum[s];
  33. }
  34. else unk = 1; /*если unk == 1 то на выходе "unknown"*/
  35. std::cin>>sign;
  36. std::cout<<s<<" "<<sign<<' ';
  37. }
  38. if(numtonam.count(ans) && unk == 0)
  39. std::cout<<numtonam[ans]<<'\n';
  40. else printf("unknown\n");
  41. }
  42. else if(cmnd == "clear"){namtonum.clear(); numtonam.clear();}
  43. cmnd.clear();
  44. }
  45. }
Success #stdin #stdout 0s 4544KB
stdin
def foo 3
calc foo + bar =
def bar 7
def programming 10
calc foo + bar =
def is 4
def fun 8
calc programming - is + fun =
def fun 1
calc programming - is + fun =
clear
stdout
foo + bar = unknown
foo + bar = programming
programming - is + fun = unknown
programming - is + fun = bar