【C语言】判断回文
相信你是最棒哒!!!
文章目录
题目描述
正确代码
总结
题目描述
输入一个字符串,输出该字符串是否回文。
输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。
如果字符串是回文,输出yes;否则,输出no。
样例输入
abcdedcba
样例输出
yes
正确代码
法一注释版
#include <stdio.h>
int main()
{
char a[111];
int i, j; // i和j用于后续的比较和索引
gets(a); // 读取一行字符串
// 注意:gets函数在C11标准中已被弃用,因为它存在缓冲区溢出的风险,建议使用fgets(a, sizeof(a), stdin);
int n = strlen(a); // 使用strlen函数计算字符串a的长度,并将其存储在变量n中
// 使用for循环从字符串的两端向中间遍历,比较对应位置的字符是否相等
for(i = 0, j = n - 1; i < j; i++, j--)
{
if(a[i] != a[j]) // 如果在某个位置,两端的字符不相等,则跳出循环
break; // 跳出循环
}
// 循环结束后,根据i和j的值判断字符串是否是回文
if(i < j) // 如果循环是因为找到了不相等的字符而跳出的,说明字符串不是回文
printf("no\n"); // 输出"no"
else // 如果循环正常结束,即所有对应位置的字符都相等,说明字符串是回文
printf("yes\n"); // 输出"yes"
return 0; // 程序正常结束,返回0
}
解析版
#include <stdio.h>
int main()
{
char a[111];
int i, j;
gets(a);
int n=strlen(a);
for(i=0,j=n-1;i<j;i++,j--)
{
if(a[i]!=a[j])
break;
}
if(i<j)
printf("no\n");
else
printf("yes\n");
return 0;
}
法二注释版
#include <stdio.h> // 包含标准输入输出库,用于printf等函数
char a[200]; // 定义一个字符数组a,用于存储最多199个字符加上一个字符串结束符'\0'
int main() // 主函数入口
{
int i, j; // 定义两个整型变量i和j,用于后续的比较和索引
//gets(a); // gets函数被注释掉了,因为它是不安全的,可能会导致缓冲区溢出
fgets(a, 200, stdin); // 使用fgets函数从标准输入读取最多199个字符(加上'\0'总共200个),存储到数组a中
int n = strlen(a) - 1; // 使用strlen函数计算字符串a的长度,并减去1,因为fgets会把换行符也读入,我们需要排除换行符
for (i = 0, j = n - 1; i < j; i++, j--) // 使用for循环从字符串的两端向中间遍历,i从0开始,j从n-1开始
{ // 在循环中,i和j分别向中间移动,直到它们相遇或者发现不匹配的字符
if (a[i] != a[j]) // 如果在某个位置,两端的字符不相等
break; // 则跳出循环
}
if (i < j) // 循环结束后,检查i和j的关系
printf("no"); // 如果循环是因为找到了不相等的字符而跳出的(即i小于j),说明字符串不是回文,输出"no"
else // 否则
printf("yes"); // 如果循环正常结束,即所有对应位置的字符都相等,说明字符串是回文,输出"yes"
return 0; // 程序正常结束,返回0
}
简洁版
#include <stdio.h>
char a[200];
int main()
{
int i, j;
//gets(a);
fgets(a, 200, stdin);
int n = strlen(a)-1;
for (i = 0, j = n - 1; i < j; i++, j--)
if (a[i] != a[j])
break;
if (i < j)
printf("no");
else printf("yes");
return 0;
}
这段代码的目的是检查用户输入的字符串是否为回文。它使用 fgets
函数读取用户输入的字符串,然后通过比较字符串的首尾字符来判断是否为回文。如果所有对应的字符都相等,那么字符串就是回文,否则不是。
注意:代码中减去1是因为 fgets
会将换行符也读入到字符串中,而换行符不应该被考虑在内。
总结
这段代码的主要逻辑是使用两个指针i和j分别指向字符串的开头和结尾,然后向中间移动,比较对应位置的字符是否相等。如果所有对应位置的字符都相等,那么字符串就是回文;如果发现不相等的字符,则字符串不是回文。