#include <stdio.h>
#include <string.h>
const int SIZE = 100;
int main() {
int n, i, isPlalindrome;
char str[SIZE];
scanf("%s", str);
n = strlen(str);
isPlalindrome = 1;
for (i = 0; i < n/2; i++) {
if (str[i] != str[n-i-1]) isPlalindrome = 0;
}
if (isPlalindrome)
printf("Yes\n");
else
printf("No\n");
return 0;
} 输入:abceecba 输出:_________
这题考字符串回文判断。拿到题别急着跑,先看循环边界:n/2 向下取整,偶数串只比一半,奇数串中间那个自动跳过,这是命题人最爱挖的坑。
最容易错的是把 n/2 理解成向上取整或者以为要比较到 n-1,导致多比或少比;还有把 strlen 当成包含\0,算错 n 值;另外有些同学会纠结奇偶长度,其实代码里 n/2 对奇偶都天然正确,不用特判。
这题表面是写个回文判断,实则在考你对 C 语言字符串处理细节的敏感度,尤其是 strlen 返回值、数组下标边界、以及循环终止条件的理解。命题人特别喜欢在这种基础题里埋‘边界陷阱’,比如把 n/2 写成 (n+1)/2,或者让循环跑到 n-1,导致多比一次或者少比一次。
程序核心就这几行:
int n = strlen(str);
int isPlalindrome = 1;
for (i = 0; i < n/2; i++) {
if (str[i] != str[n-i-1]) isPlalindrome = 0;
}第一句用 strlen 拿到字符串长度,注意它返回的是有效字符数,不包含结尾的\0。第二句初始化标志位为 1,表示默认是回文。第三句循环从 0 跑到 n/2-1,每次比较 str[i] 和 str[n-i-1],这是典型的‘头尾对称’写法:i=0 时比首尾,i=1 时比次首次尾,以此类推。