【问题标题】:How do i take user input of an Arithmetic Expression like 5-8+7*4-8+9 or 1+5?如何获取用户输入的算术表达式,如 5-8+7*4-8+9 或 1+5?
【发布时间】:2020-10-10 09:54:03
【问题描述】:

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

输入格式:

  • 输入的唯一行包含长度为 2n + 1 的字符串 s 一些 n,带有符号 s0 , s1 , . . . , s2n。
  • s的偶数位置的每个符号都是一个数字(即0到9的整数)
  • 而奇数位置的每个符号是 {+,-,*} 的三个操作之一。

但我的解决方案需要不同数组中的数字和符号(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=='\0')
      {
        exit();
      }
      cout<<"s= "<<s<<endl;
      no.push_back((int)s);
      cout<<"no= "<<no[i/2]<<endl;
    }
    else
    {
      char s;
      cin>>s;
      if(s=='\0')
      {
        exit();
      }
      cout<<"s= "<<s<<endl;
      ops.push_back(s);
      cout<<"ops= "<<ops[(i-1)/2]<<endl;
    }
    i++;
  }

但这进入了无限循环。

请帮帮我

【问题讨论】:

  • “但我无法获得所需的输入,而是得到了这个:” 好的,现在仔细想想它到底出了什么问题。您是否看到no 数组值与您的预期不同的模式?现在,您如何获得放入no 的值?您了解这是如何导致问题的吗?
  • 我可以看到有一种模式,但无法断定为什么会发生这种情况。我想知道如何正确获取no 中的值。
  • 如果你尝试类似int x = '3'; cout &lt;&lt; x &lt;&lt; endl; 会发生什么(注意单引号)?您对 C++ 中的 char 的实际含义有何理解?你熟悉 ASCII 的概念吗?
  • @KarlKnechtel 出色的工作和令人钦佩的耐心。请继续解释。当您在这里创建任何类型的答案时,请告诉我。我会尽我所能认为它是可投票的。 (我注意到你可能已经不再渴望名声了,但是……)
  • 谢谢。我明白你在说什么。我忘了进行类型转换,但即使它给出了相同的结果。我的一位朋友现在告诉我使用 ` ( s[i] - '0' ) ` 这解决了我的问题,但为什么将 0 的 ascii 值添加到数字是问题?

标签: c++ arrays input while-loop multiple-input


【解决方案1】:

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

为了做到这一点,了解 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

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2021-02-15
    • 2012-10-19
    • 2022-10-08
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多