【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分别指向字符串的开头和结尾,然后向中间移动,比较对应位置的字符是否相等。如果所有对应位置的字符都相等,那么字符串就是回文;如果发现不相等的字符,则字符串不是回文。

相关推荐
m0_377108142 分钟前
pid学习
学习
爱喝水的鱼丶2 分钟前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流
智者知已应修善业13 分钟前
【51单片机2个外部中断切换LED花样】2024-1-3
c++·经验分享·笔记·算法·51单片机
8Qi819 分钟前
LeetCode 31:下一个排列(Next Permutation)—— 完整题解笔记 ✅
笔记·算法·leetcode·指针·思维·排列
AI科技星21 分钟前
基于光速螺旋第一性原理:$G,\varepsilon_0,\alpha$引电统一完整推导+严谨证明+高精度数值全维度分析
c语言·开发语言·网络·量子计算·agi
春日见23 分钟前
五分钟入门强化学习DDPG
大数据·人工智能·算法·机器学习·计算机视觉
vivo互联网技术36 分钟前
ICLR 2026 | LiveMoments 用参考图引导的扩散模型提升重选封面帧画质
人工智能·算法·aigc技术探索
落羽的落羽37 分钟前
【算法札记】练习 | Week5
linux·服务器·c++·人工智能·计算机网络·算法·哈希算法
xgstb1 小时前
C语言随机数生成技巧
c语言·伪随机数·time函数·srand函数·随机数生成