C语言中判断一个字符串是否为回文的问题
发布网友
发布时间:2022-04-30 04:15
我来回答
共5个回答
热心网友
时间:2023-10-11 22:24
我觉得可以是先将这字符串拆分。。用一维数组a[i]来表示。分成前、后两部分。同时要知道总共的位数Z(即该数组数的个数),然后先将总共的位数整除以2,得到一个数X。建立循环。有if a[i]=a[z-i]的语句。
其中,for i=1 to x即可。
由系统给出任意字符串我不太清楚,如果是自输入字符串就容易了。
我所讲的这些,是建立在Pascal语言上的,不知你能否适用。
热心网友
时间:2023-10-11 22:24
#include<string.h>
#include<stdio.h>
main()
{
char a[40]; //定义一个存放待判断的字符数组
int i=0,len;
printf("please input your string :(length<40):");
gets(a); //逐个读取a 数组中的字符
len=strlen(a); //计算字符串的长度
for(i=0;i<(len-1)/2;i++)
{
if(a[i]!=a[len-1-i])//逐个将两端的字符进行比较 如第一个与最后一个比较 第二个与倒数第二个比较 如不同 则跳出循环
break;
}
if(i==(len-1)/2)// 如i已经自加至字符串的中间位置 则表示是回文 如 没有 则不是
printf("Yes");
else
printf("No");
}
热心网友
时间:2023-10-11 22:25
#include"stdio.h"
panan(char str[],int count1,int count)/*count1是中间位置,count是字符串个数*/
{
if(str[count1]==str[count-1-count1]&&count1==0)/*递归结束的条件,当0与最后一个相等返回1*/
return(1);
else if(str[count1]==str[count-1-count1])/*当中间的相等,开始向两边移动,当count1为0时结束*/
{
panan(str, count1-1,count);/*递归*/
}
else
return(0);/*如果不满足条件的话返回0*/
}
void main()
{
char str[20],c;
int i=0,count=0,j,k;
printf("请输入一个字符串\n");
while((c=getchar())!='\n')
{
str[i++]=c;
count++;
}
j=count/2;
k=panan(str,j,count);
if(k==1)
{
printf("输入的字符串是回文串\n");
}
else
printf("输入的字符串不是回文串\n");
}
热心网友
时间:2023-10-11 22:25
用这个函数可以判断 传入的是字符串指针不*字符查指针
int fun(const char * str)
{
int len = strlen(str);
int i;
for(i = 0; i < len/2; i++)
{
if(*(str+i) != *(str+len-i-1))
return 1; //如果不是回文返回1
}
return 0; //如果是回文返回0
}
热心网友
时间:2023-10-11 22:26
更正自己的一下,字符串好像不能用数组表示。抱歉。