char 和 int 的总和导致我的 C++ 代码中出现奇怪的 char

Sum of char and int leads to weird char in my c++ code

我尝试在线搜索解决方案,但找不到。我来的衣柜是这个A similar unanswered question on cplusplus.com

这是我的代码....

int main()
{
char a[1000000],s[100000];
scanf("%s",s);
int i,l=strlen(s);


    //cout<<l;
for(int i=0;i<l;i++)
    a[i]=s[l-i-1];    //to reverse the word in s[]

    cout<<a<<endl;
for(i=0;i<l;i++)
    {
        s[i]+=a[i]-96;
        if(s[i]>'z')
        {

            int diff=s[i]-'z';
            s[i]='a'+(diff-1);

        }
    }    
   cout<<s;

return 0;
}

//l=length of string.
//a[i]=is another string with word in s[] being reversed.

我的问题是,当我执行此命令并提供输入时,例如 world,它会打印出一些 奇怪的字符 。 我看不出我应用的逻辑有任何错误,现在我感到很沮丧。

问的问题是我应该添加两个字符串,其中一个是另一个字符串的反向版本,并且添加的方式是 'a' + 'b' = 'c''d' + 'a' = 'e' ....和'z' + 'a' = 'a'。这样加法在small-alphabets.

下关闭

您的问题是您使用的是带符号的字符(带符号的字节)。当 signed char 超过 127 时,它变为负值。这会导致您的计算忽略值超出范围的事实,并且在打印时将其转换回高位字符。

您可以简单地用这个替换环绕检查:

    while ((unsigned char)s[i] > 'z')
    {
        s[i] -= 26;
    }

然后您的程序至少会执行您希望它执行的操作。评论中也有很好的建议,可以让它更健壮。