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;
}

修正后的代码解释:

  1. 使用fgets代替gets函数,可以更安全地读取输入,并且避免了潜在的缓冲区溢出问题。同时,我们限制了每行输入的最大长度为10001个字符。

  2. 对于每次读取的字符串,我们检查最后一个字符是否为换行符\n,如果是,则将其替换为字符串结束符\0,并更新字符串长度。

  3. 在计算回文字符串时,将j >= 0修改为i < len,确保只遍历有效的输入字符。

  4. c数组的大小更改为[10001][10],以便存储"Yes"和"No"。

  5. 在将"Yes"或"No"存储到c数组时,使用strcpy函数代替直接赋值,以确保字符串的正确复制。

  6. 使用printf函数在输出结果时,每行末尾打印换行符\n,以保证每个结果占一行。

这样,修正后的代码可以判断一个数是否为回文数,并将结果存储在数组中,最后统一输出每个结果。

补充说明

这段代码使用了一个二维字符数组来存储输入的数字字符串,并使用了两个二维字符数组来存储反转后的字符串和最终的结果。对于实际应用来说,可以考虑使用更简洁的代码,例如使用一个字符数组来存储输入的数字字符串,并使用一个布尔变量来记录是否为回文数。

同时,这段代码只考虑了整数类型的回文数,对于小数类型的回文数,需要进行相应的修改。

希望这篇文章能够帮助您理解C语言代码优化和回文数判断的相关知识。如果您还有其他问题,请随时提出。

C语言代码优化:判断一个数是否为回文数

原文地址: https://www.cveoy.top/t/topic/zof 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录