C语言代码优化:判断一个数是否为回文数
C语言代码优化:判断一个数是否为回文数
以下是您提供的代码的修正版本:
#include <stdio.h>
#include <string.h>
int main() {
int cnt = 0;
char a[10001][10001], b[10001][10001], c[10001][10] = {0};
while (fgets(a[cnt], 10001, stdin) != NULL) {
int len = strlen(a[cnt]);
if (a[cnt][len - 1] == '\n') {
a[cnt][len - 1] = '\0'; // 移除fgets读取的换行符
len--; // 更新字符串长度
}
for (int i = 0, j = len - 1; i < len; i++, j--) {
b[cnt][i] = a[cnt][j];
}
if (strcmp(a[cnt], b[cnt]) == 0) {
strcpy(c[cnt], "Yes");
} else {
strcpy(c[cnt], "No");
}
cnt++;
}
for (int i = 0; i < cnt; i++) {
printf("%s\n", c[i]);
}
return 0;
}
修正后的代码解释:
-
使用
fgets代替gets函数,可以更安全地读取输入,并且避免了潜在的缓冲区溢出问题。同时,我们限制了每行输入的最大长度为10001个字符。 -
对于每次读取的字符串,我们检查最后一个字符是否为换行符
\n,如果是,则将其替换为字符串结束符\0,并更新字符串长度。 -
在计算回文字符串时,将
j >= 0修改为i < len,确保只遍历有效的输入字符。 -
将
c数组的大小更改为[10001][10],以便存储"Yes"和"No"。 -
在将"Yes"或"No"存储到
c数组时,使用strcpy函数代替直接赋值,以确保字符串的正确复制。 -
使用
printf函数在输出结果时,每行末尾打印换行符\n,以保证每个结果占一行。
这样,修正后的代码可以判断一个数是否为回文数,并将结果存储在数组中,最后统一输出每个结果。
补充说明
这段代码使用了一个二维字符数组来存储输入的数字字符串,并使用了两个二维字符数组来存储反转后的字符串和最终的结果。对于实际应用来说,可以考虑使用更简洁的代码,例如使用一个字符数组来存储输入的数字字符串,并使用一个布尔变量来记录是否为回文数。
同时,这段代码只考虑了整数类型的回文数,对于小数类型的回文数,需要进行相应的修改。
希望这篇文章能够帮助您理解C语言代码优化和回文数判断的相关知识。如果您还有其他问题,请随时提出。
原文地址: https://www.cveoy.top/t/topic/zof 著作权归作者所有。请勿转载和采集!