c语言判断是否为回文

c语言判断是否为回文,第1张

首先清楚什么是回文。。。我们称正读和反读都相同的字符序列为“回文”,如“abba”、“abccba”、12321、123321是“回文”。

然后再看程序,把长度为n的字符串的每一个字符排下标,即从0到n-1,要判断是否回文,就是把一串字母进行前后比对,即下标0的字符和下标为n-1的字符,1与n-2,2与n-3。。。

for

(i

=

0;

i

<

len

/

2;

i++)

{

if

(str[i]

!=

str[len-1-i])

{

break;

{{{{这里是什么意思啊}}}}}}

//

这里是判断不符号回文的情况,只要两个字符不符合,那这整个字符串就不是,所以break跳出循环判断

}

}

if

(i

==

len

/

2)

{{{{我不懂这里是什么意思}}}}}}

//

长度为n的字符串最多只能比对len

/

2次,那么如果每对都符合,那就是回文啦

{

printf(“%s

shi

hui

wen\n“,

str);

}

//返回TRUE:是回文字符串

// FALSE:不是回文字符串

bool CheckRer(char pString)

{

char pStart; //指向字符串头的指针

char pEnd; //指向字符串尾的指针

bool bReturn;

//初始化变量

bReturn = true;

pStart = pString;

pEnd = pStart + Strlen(pString) - 1;

//判断回文字符串,直到头指针的位置大于等于尾指针的位置

while (pStart < pEnd)

{

//比较两个字符是否相等(有些编译器可能需要使用字符串比较函数)

if ( pStart != pEnd )

{

bReturn = false;

break;

}

//移动指针

pStart++;

pEnd--;

}

return bReturn;

}

下面的程序代码,可以写成判断回文的小程序。

#include<stdioh>

//#include<stringh>多余

voidmain()

{

inti=0,x=1,t;

chara[50000];

gets(a);

while(a[i]!='\0')

{

i++;

}

for(t=0;t<i;t++)

{

if(a[t]!=a[i-t-1])

{

x=0;

break;

}

}

if(x==0)

{

printf("NO\n");

}

if(x==1)

{

printf("Yes\n");

}

getchar();

}

思路解析

所谓的回文字符串就是正着念和倒着念是一样的字符串,比如:ABA或ABBA都是回文字符串。判断回文字符串的办法就是成对比较,就是把字符串的第一个字符和倒数第一个字符比较,把第二个字符和倒数第二个比较……,以此类推。所以要写一个判断字符串是否回文的函数要先算出字符串S的字符数n,然后把S[0]和S[n-1-0]比较,S[1]和S[n-1-1]比较,S[2]和S[n-1-2]比较,……,直到把S[n/2]和S[n-1-n/2]比较,只要发现一个不同就可以判断不是回文,否则就是回文。这里要特别说明两点:一是为什么S[0]要和S[n-1]比较而不是S[n]比较呢?因为数组的下标都是从0开始的,也就是说,有6个字符的字符串S,事实上是串下标是从S[0]-S[5],而不是S[6],所以每次比较n要减1。二是为什么最后一个比较是直到S[n/2],而不是到最后一个字符?这是因为字符串的前半段每个字符都是和后半段对应的字符相比较的,比较完了前半段也就比较完了后半面。根据上面这个思路,代码如下:

程序代码

#include <iostream>             //控制台 *** 作头文件

#include <stringh>             //字符串 *** 作头文件 

bool Hw(char s[])               //检测是否回文的函数

{int i,n=strlen(s);             //循环变量和字符串长度

 if(n<=1) return false;         //空串或只有一个字符不算回文串

 for(i=0;i<n/2;i++)             //用循环逐个检测

     if(s[i]!=s[n-1-i])         //如果对称位置的字符不一样

        return false;           //结束函数并返回假

 return true;}                  //检测完还没发现不同就返回真

 

int main()                              //主函数

{int i;                                 //循环变量

 char S[255];                           //用于存放字符串的数组

 

 for(;;)                                //弄一个无穷循环 

    {printf("请输入字符串(END结束):");  //显示提示信息

     scanf("%s",S);                     //从键盘输入字符串到S中 

     if(strcmp(S,"END")==0) break;      //如果输入END退出循环

     if(Hw(S))                          //用自定义函数判断是否回文

        printf("这是回文字符串\n\n");   //显示判断结果

     else printf("这不是回文字符串\n\n");}

 printf("\n");                          //输完所有数再空一行

 system("PAUSE");                       //暂停屏幕以便查看显示结果

 return 0;}                             //结束程序

 

运行结果

以上程序在DEV C++中运行通过,运行结果截图如下:

#include<stdio.h>

#include<string.h>

intmain()

chara[100]={0};

inti=0;

intlen=0;

printf("pleaseinputcharacterstring:\n");

gets(a);

len=strlen(a);//计算输入字符串的长度;

for(i=0;i<(len/2);i++)//只需要判断前一半(len/2)长度就好了

if(a[i]!=a[len-1-i])//判断是否为回文数;

printf("不是回文数\n");

return0;

printf("是回文数\n");

return0;

扩展资料:

printf用法:

printf()函数的调用格式为:printf("&lt;格式化字符串&gt;",&lt;参量表&gt;)。

其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

比如:

int a=6789;

printf("a=%d\n",a);

输出结果为a=6789。

# include <stdioh> //添加头文件

int main(void)//主函数

{

int val;

int m;

int sum = 0;//定义三个整型变量,分别是val m sum,其中sum赋初值位0

printf("请输入您需要判断的数字:");

scanf("%d",&val);//接受用户输入的数据,并存入变量val中

m = val;//将m赋值为val

while (m)//通过循环将m分解,将每位的数字乘以位数

{

sum = sum 10 + m%10;

m /=10;

}

//比如是123,那么整个循环过程是

//sum=3

//sum=310+2

//sum=3210+1

//sum=321

//此时sum于val相等

if(sum == val)//若sum与val相等,则输出yes,否则输出no

printf("Yes!\n");

else

printf("No!\n");

return 0;//主函数函数返回值

}

希望能帮助你!

#include<stdioh>

int x,y;

judge(int data,int len)

{

int i,j,f=0;

for(i=0,j=len-1; i<=j; i++,j--)

{

if((data+i)!=(data+j))

{

f=1; printf("%d 不是回文!!!\n",x); break;

}

}

if(f==0)

printf("%d 是回文 !\n",x);

}

separate(int data,int n)

{

int j,k,t;

y=0;

while(n!=0)

{

(data+y)=n%10; n=n/10; y++;

}

(data+y)='\0';

for(j=0,k=y-1; j<=k; j++,k--)

{

t=(data+j); (data+j)=(data+k); (data+k)=t;

}

}

void main()

{

int a[99];

printf("请输入一个正整数:");

scanf("%d",&x);

separate(a,x);

judge(a,y);

}

#include "Stdioh"

#include "Conioh"

int main(void)

{

int i,k;

long n,m;

int digit[10];

clrscr();

puts("Please input a long number:");

scanf("%ld",&n);

m=n;k=0;

do

{

digit[k++]=m%10; ///保存最低位/

m/=10; ///去掉最低位/

}while(m!=0);

k--;

for(i=0;i<k;i++,k--) ///判断是否为回文数/

if(digit[i]!=digit[k]) break; ///不相等,则不是回文数,推出循环/

if(i<k) printf("%ld is not a huiwen number",n);

else printf("%ld is a huiwen number",n);

getch();

return 0;

}

以上就是关于c语言判断是否为回文全部的内容,包括:c语言判断是否为回文、编程序判断一个字符序列是否是回文、怎么判断回文等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9267161.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存