You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用for循环后嵌套条件判断失效,求原因及代码问题排查

问题原因与修复方案

你的代码存在几个致命逻辑错误,导致嵌套的条件判断完全失效,下面逐一说明并修复:

1. 循环变量冲突

外层遍历测试用例的for循环使用了i,内层判断回文的for循环也复用了i。这会直接覆盖外层循环的i值,比如第一次处理单词后,i会被内层循环修改为字符串长度-1,外层循环的i < t条件会直接不成立,后续测试用例根本不会执行。

修复:将内层循环变量改为j,避免变量名冲突。

2. 回文判断逻辑错误

  • 内层循环终止条件i < n(n = strlen(s)-1)会导致重复比较。比如长度为5的字符串,会重复比较0和4、1和3、2和2、3和1、4和0,完全没必要,还会让计数c的数值失真。正确的回文判断只需比较到字符串中间位置,循环条件应为j <= n / 2。
  • 你的代码会在字符不相等时继续计数,这会导致错误判定。只要有一对字符不相等,就可以直接判定不是回文,应该立即跳出循环。

3. 计数变量未重置

变量c仅在定义时初始化为0,但每次处理新单词时没有重置。上一个单词的计数结果会被带到下一次判断中,导致条件判断完全错误。

修复:改用布尔变量标记回文(更清晰),或者在每次读取新单词后将c重置为0。

4. 长度与缩写计算错误

  • 题目要求单词长度严格大于7时用缩写,而你用了n >7,但n = strlen(s)-1(即字符串长度为n+1),正确条件应为(n+1) >7。
  • 缩写的长度计算错误:示例中长度为12的单词缩写为m12m,你代码里写的n-1会得到11,正确应该用字符串的实际长度n+1。

修正后的完整代码

#include <stdio.h>
#include <string.h>

int main() {
    char s[21];
    int t, i, n, j;
    scanf("%d", &t);

    for (i = 0; i < t; i++) {
        scanf("%s", s);
        n = strlen(s) - 1;
        int is_palindrome = 1; // 用布尔变量标记是否为回文,逻辑更清晰

        // 仅比较到字符串中间位置
        for (j = 0; j <= n / 2; j++) {
            if (s[j] != s[n - j]) {
                is_palindrome = 0;
                break; // 发现不相等,直接跳出循环
            }
        }

        if (is_palindrome) {
            if ((n + 1) > 7) {
                printf("%c%d%c\n", s[0], n + 1, s[n]);
            } else {
                printf("%s\n", s);
            }
        } else {
            printf("Not Palindrome\n");
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Abida Zainab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:35:50