c++ - 在堆栈方面使用 atoi 的问题,已保存编号 318 而不是 3
问题描述
我正在使用堆栈和 postfixParser。它决定返回并保存以前的数字,而不是保存 3,但我不明白它为什么会这样做。这是我的代码:
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 个,我的代码没有返回,为什么我的代码会返回。问题是,如果它回到 18,它不会打印出“mult inside 2 digits”吗?它与 switch 语句一起使用(这就是我将其注释掉的原因)。
解决方案
推荐阅读
- sql - 无法解决 Snowflake SQL 查询中的“无法识别数值'-'”错误
- webpack - 如何使用 webpack externalsType 模块
- json - 使用具有 ISO 8601 格式的“DateTime.LocalNow”
- django - Django RESTApi 使用 ForeignKey 作为过滤器仍然会产生错误
- python - ortools / 线性规划 - 最小化跨供应商的购物篮成本
- azure-data-factory - 使用数据流以分层格式存储文件时出现 Azure 数据工厂错误
- python-3.x - Tensorflow 2.2.0 无法加载动态库“libcudnn.so.7”
- sql-server - SSIS 加载带有动态列的 Excel 文件
- javascript - Vue:全局 v 指令在一个组件中工作,但不在另一个组件中
- informatica - Informatica 中的更新大约需要很长时间。(38 小时)