Проблема с использованием atoi в терминах стека, имеет номер 318 вместо 3 сохраненных - PullRequest
0 голосов
/ 09 марта 2020

Я использую стек и postfixParser. Вместо сохранения 3 он решает вернуть go и сохранить предыдущее число, но я не понимаю, почему он это сделал. Вот мой код:

int postfixParser(string a)
{
  cout<<a<<endl;
  LinkedStack<int> Tempstack;
  int mult;
  for(int i=0; i<a.length();i++)
  {
    if(isdigit(a[i])&&isdigit(a[i+1])&&isdigit(a[i+2])&&isdigit(a[i+3]))
    {
      char chr[4];
      chr[0]=a[i];
      chr[1]=a[i+1];
      chr[2]=a[i+2];
      chr[3]=a[i+3];
      mult=0;
      mult=atoi(chr);
            cout<<"mult inside 4 digit"<<mult<<endl;
      Tempstack.push(mult);
      i=i+3;
    }
    else if(isdigit(a[i])&&isdigit(a[i+1])&&isdigit(a[i+2]))
    {
         char chr[3];
         chr[0]=a[i];
       chr[1]=a[i+1];
       chr[2]=a[i+2];
              mult=0;
      mult=atoi(chr);
      cout<<"mult inside 3 digit"<<mult<<endl;

      Tempstack.push(mult);
      i=i+2;
    }
    else if(isdigit(a[i])&&isdigit(a[i+1]))
    {
      char chr[2];
      chr[0]=a[i];
      chr[1]=a[i+1];
      mult=atoi(chr);
      cout<<"mult inside 2 digit"<<mult<<endl;

      Tempstack.push(mult);
      ++i;
    }
    else if(isdigit(a[i])) {//if it is a 1digit number
      char chr[1];
      chr[0]=a[i];
      mult=atoi(chr);
      cout<<"mult inside 1 digit"<<mult<<endl;
      Tempstack.push(mult);

    //     switch(a[i]){
    //     case '1':
    // Tempstack.push(1);
    //     break;
    //     case '2':
    // Tempstack.push(2);
    //     break;
    //     case '3':
    // Tempstack.push(3);
    //     break;
    //     case '4':
    // Tempstack.push(4);
    //     break;
    //     case '5':
    // Tempstack.push(5);
    //     break;
    //     case '6':
    // Tempstack.push(6);
    //     break;
    //     case '7':
    // Tempstack.push(7);
    //     break;
    //     case '8':
    // Tempstack.push(8);
    //     break;
    //     case '9':
    // Tempstack.push(9);
    //     break;
    //     case '0':
    // Tempstack.push(0);
    //     break;
    //   }
    }
    else if(a[i]==' ')
    {

    }
    else
    {
      int c=Tempstack.top();
      Tempstack.pop();
      int b=Tempstack.top();
      Tempstack.pop();
      switch(a[i])
      {
        case '+':
        Tempstack.push(b+c);
        break;
        case '-':
        Tempstack.push(b-c);
        break;
        case '*':
        Tempstack.push(b*c);
        break;
        case '/':
        if(c==0) { Tempstack.push(0);}
        else {Tempstack.push(b/c);}
      }
    }
  }

  return Tempstack.top();
}

Когда я пытаюсь напечатать "18 3 4 * -", у него есть 18, Мой код не имеет его go назад, так почему мой код возвращается. Проблема в том, что если вернуться к 18, не будет ли распечатано «мульт внутри 2 цифр»? Он работает с оператором switch (вот почему я это закомментировал).

...