切换并将字符值添加到数组中
Switch and adding char values to array
我在为数组提供新的字符值时遇到问题。我不知道为什么即使 n 是 12,我也得到符号"<"?在这种情况下,我的程序应该将表达式int char* tab = "93+"
更改为一个值12
。
char* tab = "93+";
int b = sizeof (tab);
char* tmp = new char[b] ;
tmp [b-1] = ' ';
if(isdigit(tab[i]) && isdigit(tab[i+1]) ){
int n;
if(tab[i+2]=='+' || tab[i+2]=='-' || tab[i+2]=='*'){
switch(tab[i+2]){
case '+':
n = (tab[i]-'0') + (tab[i+1]-'0');
break;
case '-':
n = (tab[i]-'0') - (tab[i+1]-'0');
break;
case '*':
n = (tab[i]-'0') * (tab[i+1]-'0');
break;
}
tmp[i] = n+'0'; // I should have 12 but I get <
}
else if (tab[i+2]!='+' || tab[i+2]!='-' || tab[i+2]!='*'){
goto LAB;
}
}
问题出在这一行:
tmp[i] = n+'0'; // I should have 12 but I get <
n 是 12,但 12 + '0' != '12',因为 '12' 不是字符。您将 ascii 值比 '0' 多 12 的字符放入 tmp[i],即 '<'。
我相信将 tmp 声明(并将)为 int 会更适合您的目的。
另请注意,sizeof (tab)
与 sizeof (char *)
相同,而不是 sizeof ("93+")
,因此您可能总是会得到b==4
(在 32 位机器中)。
你确实应该得到'<'。原因如下:tmp
是一个字符数组。您计算出 n 为 12。这是正确的。然后,您添加了"0",即 48。48 + 12 = 60。所以你在 tmp[i] 中存储 60。ASCII 60 是"<"。
你可以使用int tmp
,而不添加'0',你会在tmp[i]中得到12。
相关文章:
- 如何将元素添加到数组的线程安全函数?
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 添加到数组指针
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 将数组的元素添加到链表中
- 如何在C++中将元素添加到非固定大小的数组中?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 在 char* 数组中添加两个索引
- c++ 如何在数组的开头添加值并为其编制索引?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 添加数组特定列的元素
- 添加数组元素:需要左键作为赋值的左操作数
- 添加数组所有元素的 SSE 指令
- 如何添加数组的偶数和奇数之和
- 向std::multimap添加数组值
- 用内部类函数递归地添加数组数
- 使用自增操作符添加数组元素
- 创建一个模板函数,如果数据类型不同,则添加数组的元素