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;
}
然后您的程序至少会执行您希望它执行的操作。评论中也有很好的建议,可以让它更健壮。
我尝试在线搜索解决方案,但找不到。我来的衣柜是这个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;
}
然后您的程序至少会执行您希望它执行的操作。评论中也有很好的建议,可以让它更健壮。