回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。
6条回答 默认 最新
关注 回文串:字符串反转后和原字符串相同同,比如aba
判断代码如下,思路是从头尾开始依次比较,全部相同就代表是回文串
算法实现:#include<stdio.h> #include<string.h> int main(void) { int i,j; int len; //用于记录字符串长度 char S1[1005]; char S2[1005]; printf("请输入需要判断的字符串:"); gets(S1); len = strlen(S1); for(i=len-1,j=0;i>=0;i--,j++) { S2[j] = S1[i]; //将S1逆序赋给S2 } for(i=0,j=0;i<len;i++,j++) { if(S1[i]!=S2[i]) //如果S1正序和逆序不同,则不是回文字符串 { printf("该字符串不是回文字符串!"); break; } else if(i==len-1) { printf("该字符串是回文字符串"); } } return 0; }
用栈实现:
typedef struct StackNode { char date; struct StackNode* next; }*LinkStack,StackNode; //初始化链栈 void InitStack(LinkStack* S) { *S=NULL; } //压栈 void PushStack(LinkStack* S,char e) { LinkStack p; p=(LinkStack)malloc(sizeof(StackNode)); p->date=e; p->next=*S; *S=p; } //出栈 void PopStack(LinkStack* S,int* elem) { LinkStack p; *elem=(*S)->date; p=(*S); *S=(*S)->next; free(p); } //判断回文,存储字符串的一半,利用链栈的特性判断字符串是否是回文 int Is_cric(LinkStack* S,char arr[],int str) { int i=0; int j=0; int c; //存储字符串的一半 for(i=0;i<str/2;i++) { PushStack(S,arr[i]); } //把每个字符压出来判断是否与后一半字符相等 while((*S)!=NULL) { int t=arr[j+str/2]; PopStack(S,&c); if(t!=c) { printf("不是回文\n"); return 0; } j++; } printf("是回文\n"); return 1; } int main() { LinkStack S; int str=0; char arr[100]; printf("请输入字符串;>"); scanf("%s",arr); str=strlen(arr); InitStack(&S); Is_cric(&S,arr,str); return 0; }
有帮助的话采纳一下
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
- ¥15 个人网站被恶意大量访问,怎么办
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 Centos / PETGEM
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制