Как я могу принять вводимые пользователем выражения Arithmeti c, например 5-8 + 7 * 4-8 + 9 или 1 + 5? - PullRequest
0 голосов
/ 20 июня 2020

Решаю задачу по нахождению максимального значения арифметического c выражения. Но у меня возникла проблема с вводом данных для выражения, поскольку символы не фиксированы.

Формат ввода:

  • Единственная строка ввода содержит строка s длины 2n + 1 для некоторого n с символами s0, s1,. . . , s2n.
  • Каждый символ в четной позиции s является di git (то есть целым числом от 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++;
  }

Но это переходит в бесконечное l oop.

Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 20 июня 2020

Ваш вывод кажется правильным, но, как уже упоминалось в комментариях, ваши значения читаются как символы, а не как цифры, поэтому необходимо выполнить преобразование.

Для этого необходимо Может быть полезно понять, что в 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
...