C语言判断一个字符串是不是回文字符串案例讲解
我们先看什么是回文字符串:
思路分析
因为回文字符串正读和反读都是相同的,所以可以推出一个结论:
字符串的的第1个字符和最后一个字符相同,第二个字符和倒数第二个字符相同,依次类推。
我们可以通过判断对应位置上的字符是否全部相同来判断这个字符串是不是回文字符串。
只要有一个对应位置上的字符不相同那么就判断这个字符串不是回文字符串。
以字符串"abvdg"和"level"为例进行代码编写。
案例全部代码如下
#include <stdio.h>
#include <string.h>
void main(){
char arr[10];
int i,a=0;
gets(arr);//从键盘输入字符,给字符数组赋值
a=strlen(arr);//计算字符串长度
for(i=0;i<a;i++){
if(arr[i]==arr[a-1-i]){
a=1;//对应位置上的字符相等就给a赋值为1
}
else{
a=0;//对应位置上的字符不相等就给a赋值为0并结束循环
break;
}
}
if(a==1){//对应位置上的字符都相等,a一直都是赋值为1
printf("这个字符串是回文字符串");
}
else{
printf("这个字符串不是回文字符串");
}
}
上面的代码其实是错误的,在文章发布半年后有小伙伴指出这个错误。千万不要学习上面的代码了,我保留下了纯粹是纪念这个事。
下面是错误原因分析:
我一边把a当计数器用一边接收字符串的长度导致逻辑错误。
char arr[10];
int i,a=0;
gets(arr);//从键盘输入字符,给字符数组赋值
a=strlen(arr);//计算字符串长度
把计数器定为int count =0就可以修改错误。
以下是修改后的全部代码
#include <stdio.h>
#include <string.h>
void main(){
char arr[10];
int i,a=0;
int count=0;
gets(arr);//从键盘输入字符,给字符数组赋值
a=strlen(arr);//计算字符串长度
for(i=0;i<a;i++){
if(arr[i]==arr[a-1-i]){
count=1; //对应位置上的字符相等就给a赋值为1
}
else{
count=0;//对应位置上的字符不相等就给a赋值为0并结束循环
break;
}
}
if(count==1){//对应位置上的字符都相等,a一直都是赋值为1
printf("这个字符串是回文字符串");
}
else{
printf("这个字符串不是回文字符串");
}
}
代码运行结果如下
字符串"abvdg"
字符串"level"
字符串"acaaa"
字符串"avg"
本文结束。