#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char *s[80]; char *a[80]; gets(s); int i,j; j=strlen(s); for(i=0;i<j;i++) { if(s[i]>='A'&&s[i]<='Z') a[i]=s[i]+32; else a[i]=s[i]; } for(i=0;i<j;i++) { if(a[i]!=a[j-1]) { printf("no"); return 0; } } printf("yes"); return 0; } 为什么这串代码输出结果不能符合题目 判断字符是否是回文 “回文”是一种顺序读和反序读都一样的字符串,例如:“121”“abcba” “ABCCBA”编写程序,判断任一字符串是否为回文。 相关知识 通过指针来传递参数
时间: 2024-04-02 15:37:04 浏览: 77
#include <stdio.h>
4星 · 用户满意度95%
这段代码的问题在于使用了 `gets()` 函数,这个函数容易导致缓冲区溢出,从而导致程序崩溃或输出错误结果。建议使用 `fgets()` 函数代替 `gets()` 函数,并且需要注意去掉字符串末尾的换行符。此外,还需要将小写字母转换为大写字母进行比较。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
int main() {
char s[80];
char a[80];
fgets(s, 80, stdin);
s[strcspn(s, "\n")] = '\0'; // 去掉字符串末尾的换行符
int i, j;
j = strlen(s);
for (i = 0; i < j; i++) {
if (s[i] >= 'a' && s[i] <= 'z') // 小写字母转换为大写字母
a[i] = s[i] - 32;
else
a[i] = s[i];
}
for (i = 0; i < j; i++) {
if (a[i] != a[j - 1 - i]) { // 判断是否回文
printf("no");
return 0;
}
}
printf("yes");
return 0;
}
```
阅读全文