切换并将字符值添加到数组中

Switch and adding char values to array

本文关键字:添加 数组 字符      更新时间:2023-10-16

我在为数组提供新的字符值时遇到问题。我不知道为什么即使 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。