暴力查找回文字符串

该文章介绍了一个C语言程序,用于找出给定字符串中最长的回文子串。程序首先忽略标点、空格并统一字符串大小写,然后通过遍历和判断回文条件找到最长的回文部分。最后,输出找到的最长回文子串。
摘要由CSDN通过智能技术生成

输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首尾不要输出多余的字符串)。输入字符串长度大于等于1小于等于5000
————————————————
版权声明:本文为CSDN博主「malloc_88」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45486992/article/details/123135651

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void un(char s[])//统一字符串
{
    for(int i=0;i<strlen(s);i++)
    {
        if(s[i]>='A'&&s[i]<='Z')
        {
            s[i]=s[i]-'A'+'a';
        }
    }
}
int panduan(char s[])
{
    int num=strlen(s);
    char s1[num];
    strcpy(s1,s);
    un(s1);
    int sea=1;
    for(int i=0;i<num/2;i++)
    {
        if(s1[i]!=s1[num-1-i])
        {
            sea=0;
            break;
        }
    }
    return sea;
}//这个判断回文字符的函数是正确的

int main()
{
    char s[5000];
    gets(s);//s是输入的字符串
    int length=strlen(s);
    char huiwenzancun[5000]={'\0'};//暂存回文
    int huiwenlenth=1;
    int i=0;
    int start=0;
    int end=0;
    if(length>0&&length<2&&((s[0]>='a'&&s[0]<='z')&&(s[0]>='A'&&s[0]<='Z')))//只输入一个字符
    {
        huiwenzancun[i]=s[i];
    }
    else if(length<2||length==0)
        printf("NULL");
    else
    {
        for(i=0;i<length;i++)
            for(int j=i+1;j<length;j++)
        {
            char t[5000]={'\0'};//用来存放s[i]到s[j]的字符串
            int a=0;
            for(int k=i;k<=j;k++)
            {
                if((s[k]>='a'&&s[k]<='z')||(s[k]>='A'&&s[k]<='Z'))
                {
                    t[a]=s[k];
                    a++;
                }
            }
            if((panduan(t))==1&&strlen(t)>huiwenlenth)
            {
                huiwenlenth=strlen(t);
                strcpy(huiwenzancun,t);
                start=i;
                end=j;
            }
        }
        for(int op=start;op<=end;op++)
            printf("%c",s[op]);
    }


}

特别鸣谢:最长的回文字符串C语言_最长回文字符串c语言_空气维他命的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值