c++ 判断一个字符串是否是回文 程序怎么写
发布网友
发布时间:2022-04-30 04:15
我来回答
共3个回答
热心网友
时间:2023-10-11 22:24
【思路解析】
所谓的回文字符串就是正着念和倒着念是一样的字符串,比如: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 <string.h> //字符串操作头文件
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++中运行通过,运行结果截图如下:
热心网友
时间:2023-10-11 22:24
#include <stdio.h>
#include <string.h>
int main (void)
{
char a[20],b[20];
int i,flag;
printf ("please input:");
gets (a);
for (i=0; i<strlen (a)/2; i++)
{
*(b+i) = *(a+strlen (a)-i-1);
if (*(a+i)==*(b+i))
flag = 1;
else
flag = 0;
}
if (flag)
printf ("Yes!是回文数\n");
else
printf ("no!不是回文数\n");
return 0;
}
热心网友
时间:2023-10-11 22:25
指针,从两头跑。