我向数组提供新的char值有问题。我不知道为什么我会得到“<”即使n是12?在这种情况下,我的程序应将表达式int char* tab = "93+"
更改为一个值12
。
char* tab = "93+";
int b = sizeof (tab);
char* tmp = new char[b] ;
tmp [b-1] = '\0';
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;
}
}
答案 0 :(得分:1)
问题出在这一行:
tmp[i] = n+'0'; // I should have 12 but I get <
n是12,但是12 +'0'!='12',因为'12'不是一个字符。你将tc [i]的ascii值超过'0'的字符放入tmp [i],即'&lt;'。 我认为将tmp声明(和处理)为int会更好。
另请注意,sizeof (tab)
与sizeof (char *)
相同,而不是sizeof ("93+")
,因此您可能始终获得b==4
(在32位计算机中)。
答案 1 :(得分:0)
你确实应该得到'&lt;'。原因如下:tmp
是一个字符数组。你计算n为12.这是正确的。然后你添加了'0',即48. 48 + 12 = 60.所以你在tmp [i]中存储了60。
ASCII 60是'&lt;'。
您可以使用int tmp
,而不是添加'0',然后在tmp [i]中获得12。