#include<stdio.h>
int main()
{
char str[80];
int i,count=0;
int t=0;
gets(str);//输入
for(i=0;str[i]!='\0';i++)//遇到字符串结束标志'\0'时停止计数
count++;//统计共有多少个字符
for(i=0;i<count/2;i++)//比较总字符数1/2次
{
if(str[i]==str[count-1-i])
t++;//若相同,就计数一次
}
if(i==t)//若累计计数达到字符串长度的一半,就是回文
printf("yes");
else
printf("no");
return 0;
}
以下是这段 C 语言代码的思路:
一、整体流程
1. 首先定义一个字符数组 str 用来存储输入的字符串,以及一些用于计数的变量 i 、 count 和 t 。
2. 通过 gets(str) 函数获取用户输入的字符串。
3. 利用循环统计输入字符串的长度,即字符个数,存储在 count 中。循环从字符串的第一个字符开始,逐个检查直到遇到字符串结束标志 '\0' 。
4. 接着使用另一个循环来判断输入的字符串是否为回文。这个循环遍历字符串的前一半字符,将每个字符与对应位置的后一半字符进行比较。如果相同,则 t 加一。
5. 最后,根据 t 的值与循环次数 i (也就是字符串长度的一半)是否相等来判断字符串是否为回文。如果相等,说明字符串是回文,输出“yes”;否则输出“no”。
二、具体步骤分析
1. 输入字符串:
- 通过 gets(str) 函数,从用户那里获取一个字符串,并将其存储在字符数组 str 中。
2. 统计字符串长度:
- 使用 for(i = 0; str[i]!= '\0'; i++) 循环遍历字符串。只要当前字符不是字符串结束标志 '\0' ,就继续循环,并将 count 加一,最终 count 存储了字符串的长度。
3. 判断是否为回文:
- 再使用一个 for(i = 0; i < count / 2; i++) 循环,这个循环只遍历字符串的前一半。对于长度为偶数的字符串,正好遍历到中间两个字符的前一个;对于长度为奇数的字符串,正好遍历到正中间的字符。
- 在这个循环内部,比较 str[i] (字符串前半部分的字符)和 str[count - 1 - i] (字符串后半部分对应位置的字符)。如果两个字符相等,说明在这个位置上字符串是对称的,将 t 加一。
4. 输出结果:
- 根据 if(i == t) 判断,如果 t 的值等于循环次数 i (也就是字符串长度的一半),说明字符串的前一半和后一半完全对应相等,即字符串是回文,输出“yes”;否则输出“no”。