#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=j-1;i>0;i--) { printf("%s",a[i]); } if(strcmp(s[80],a[80])==0) printf("yes"); else printf("No"); int strcmp(char *a, char *s); return 0; } 判断字符是否是回文 “回文”是一种顺序读和反序读都一样的字符串,例如:“121”“abcba” “ABCCBA”编写程序,判断任一字符串是否为回文。 相关知识 通过指针来传递参数 使这串代码符合题目要求
时间: 2024-04-02 18:37:16 浏览: 78
好的,我来解释一下这段代码的问题,并且修改它使其符合题目要求。
首先,这段代码有几个问题:
1. `char *s[80];` 和 `char *a[80];` 定义了两个指针数组,但是没有初始化,也没有给它们分配内存空间,所以会导致程序运行时出现非法内存访问的问题。
2. `gets(s);` 接收用户输入的字符串会导致缓冲区溢出的问题,所以应该使用更安全的函数 `fgets`。
3. `printf("%s",a[i]);` 输出字符数组要加上 `%s` 的格式化字符串,而且要输出一个字符数组的话,应该是 `printf("%s", a);` 而不是 `printf("%s", a[i]);`。
4. `strcmp(s[80],a[80])` 这个比较是错误的,因为 `s[80]` 和 `a[80]` 都是未初始化的指针数组的第 81 个元素,应该改为 `strcmp(s,a)`。
5. 代码中没有实现判断回文的功能。
下面是修改后的代码:
```
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char s[80];
char a[80];
fgets(s, 80, stdin);
int i, j = strlen(s) - 1;
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 - i]) {
printf("No");
return 0;
}
}
printf("Yes");
return 0;
}
```
这个代码将用户输入的字符串转化为小写字母后,使用双指针的方法判断是否为回文,并输出结果。
阅读全文