我如何获取用户输入的算术表达式,如 5-8+7*4-8+9 或 1+5?

How do i take user input of an Arithmetic Expression like 5-8+7*4-8+9 or 1+5?

我正在解决寻找算术表达式最大值的问题。但是我在输入表达式时遇到问题,因为没有固定的字符。

输入格式:

但我的解决方案需要不同数组中的数字和符号(int 数组中的数字和 char 数组中的操作)。

我最初是这样实现的:

  string s;
  std::cin >> s;

  n=s.size();
  cout<<"n= "<<n<<endl;

  vector<long long> no;
  vector<char> ops;

  for(int i = 0; i <n; i++)
  {
    if(i%2==0)
    {
      no.push_back(s[i]);
    }
    else{
      ops.push_back(s[i]);
    }
  }

但是我无法获得所需的输入,而是得到这个:

INPUT:
5-8+7*4-8+9

OUTPUT:
n = 11
no[0] = 53
no[1] = 56
no[2] = 55
no[3] = 52
no[4] = 56
no[5] = 57
ops[0] = -
ops[1] = +
ops[2] = *
ops[3] = -
ops[4] = +

我也尝试了另一种解决方案:

  vector<long long> no;
  vector<char> ops;

  int i=0;
  while(cin)
  {

    cout<<"i= "<<i<<endl;
    if(i%2==0)
    {
      int s;
      cin>>s;
      if(s=='[=12=]')
      {
        exit();
      }
      cout<<"s= "<<s<<endl;
      no.push_back((int)s);
      cout<<"no= "<<no[i/2]<<endl;
    }
    else
    {
      char s;
      cin>>s;
      if(s=='[=12=]')
      {
        exit();
      }
      cout<<"s= "<<s<<endl;
      ops.push_back(s);
      cout<<"ops= "<<ops[(i-1)/2]<<endl;
    }
    i++;
  }

但这会进入无限循环。

请帮帮我

你的输出似乎是正确的,但正如评论中已经提到的,你的值被读取为字符,而不是数字,因此需要进行转换。

为了做到这一点,了解在 ASCII 中,数字具有以下值可能会有所帮助:

Character ASCII-code value
      '0'         48     0
      '1'         49     1
      '2'         50     2
      '3'         51     3
      '4'         52     4
      '5'         53     5
      '6'         54     6
      '7'         55     7
      '8'         56     8
      '9'         57     9

如何从字符值中取出值?简单:

value(<character>) = ASCII_code(<character>) - ASCII_code('0'), or:
                   = ASCII_code(<character>) - 48