切换并将char值添加到数组

时间:2012-04-17 17:52:21

标签: c++ char switch-statement

我向数组提供新的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;
               }
}

2 个答案:

答案 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。