c语言 回文串的判断 麻烦高手们帮帮忙
回文串是指一个字符串从左读到右与从右读到左是一样的,现由键盘输入一行字符(最多不超过80个字符,以回车结束),判断能否通过去掉0个或1个字符,使得字符串成为回文串,如果可...
回文串是指一个字符串从左读到右与从右读到左是一样的,现由键盘输入一行字符(最多不超过80个字符,以回车结束),
判断能否通过去掉0个或1个字符,使得字符串成为回文串,如果可以输出Y,否则输出N
例如 输入 :abca 打印 Y
输入:abbbma 也打印Y 求高手写一个给我看看 顺便做点简单说明 展开
判断能否通过去掉0个或1个字符,使得字符串成为回文串,如果可以输出Y,否则输出N
例如 输入 :abca 打印 Y
输入:abbbma 也打印Y 求高手写一个给我看看 顺便做点简单说明 展开
3个回答
展开全部
#include<stdio.h>
#include<string.h>
int ReverseStr(char *str)
{//函数返回1则说明可以达到回文的效果,否则不能
int i,j,delcount;
j=strlen(str)-1;//记录尾下标
delcount=0;//记录通过删除字符的次数
for(i=0;i<j;i++,j--)
{//首尾扫描匹配字符串
if(delcount>1)//若通过删除的次数大于一次则返回
return 0;
if(str[i]==str[j])//若检测到首尾字符相等则继续比较
continue;
else
{//当不相等的时候,则进行试探是否可以达到回文的效果
if(str[i+1]==str[j]&&i+1<j)
{//若前半部分被当前检测的字符的后一个字符与后半部分当前被检测的字符相等
//则说明可以通过删除前半部分当前被检测的字符来达到回文的效果,则将下标向后移动
i++;
delcount++;
}
else if(str[i]==str[j-1]&&i<j-1)
{//若后半部分被当前检测的字符的前一个字符与前半部分当前被检测的字符相等
//则说明可以通过删除后半部分当前被检测的字符来达到回文的效果,则将下标向前移动
j--;
delcount++;
}
else if(str[i]!=str[j]&&(i+1<j||i<j-1))
{//通过前后删除一个字符都不能够达到效果则说明不能通过这种方式达到匹配则不能构成回文
return 0;
}
}
}
return 1;
}
int main()
{
char InputStr[80];
//输入字符串
printf("输入一个字符串:");
gets(InputStr);
//判断是否可以通过删除一个字符或0个字符以达到使字符串为回文
int flag=ReverseStr(InputStr);
if(flag)
printf("Y\n");
else
printf("N\n");
return 0;
}
#include<string.h>
int ReverseStr(char *str)
{//函数返回1则说明可以达到回文的效果,否则不能
int i,j,delcount;
j=strlen(str)-1;//记录尾下标
delcount=0;//记录通过删除字符的次数
for(i=0;i<j;i++,j--)
{//首尾扫描匹配字符串
if(delcount>1)//若通过删除的次数大于一次则返回
return 0;
if(str[i]==str[j])//若检测到首尾字符相等则继续比较
continue;
else
{//当不相等的时候,则进行试探是否可以达到回文的效果
if(str[i+1]==str[j]&&i+1<j)
{//若前半部分被当前检测的字符的后一个字符与后半部分当前被检测的字符相等
//则说明可以通过删除前半部分当前被检测的字符来达到回文的效果,则将下标向后移动
i++;
delcount++;
}
else if(str[i]==str[j-1]&&i<j-1)
{//若后半部分被当前检测的字符的前一个字符与前半部分当前被检测的字符相等
//则说明可以通过删除后半部分当前被检测的字符来达到回文的效果,则将下标向前移动
j--;
delcount++;
}
else if(str[i]!=str[j]&&(i+1<j||i<j-1))
{//通过前后删除一个字符都不能够达到效果则说明不能通过这种方式达到匹配则不能构成回文
return 0;
}
}
}
return 1;
}
int main()
{
char InputStr[80];
//输入字符串
printf("输入一个字符串:");
gets(InputStr);
//判断是否可以通过删除一个字符或0个字符以达到使字符串为回文
int flag=ReverseStr(InputStr);
if(flag)
printf("Y\n");
else
printf("N\n");
return 0;
}
展开全部
追问
貌似还是不对 因为我输入abbbbbbbcbba 输出是no 正常的话 输出应该是yes 因为去掉c就是回文串了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你不息止的生命启示一如
齐整花园的男人们,
我知道,总是知道,我会是葡萄园里的一个工人,**
他眼见跑道在血泊中飘流,
无以计数的草,绵延拜倒起身,
睨虹闪烁哈哈
齐整花园的男人们,
我知道,总是知道,我会是葡萄园里的一个工人,**
他眼见跑道在血泊中飘流,
无以计数的草,绵延拜倒起身,
睨虹闪烁哈哈
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询