c - 字符串中最长的回文及其长度

标签 c

我有一个程序,应该通过一个字符串来识别可能的回文,检查它是否是回文,然后从 palindromelength() 返回长度,如果不是,则返回 -1,并且打印出字符串中最长的回文。 程序正在编译,但输出错误。

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int palindromelength(char *str, int i, int j){
    char *start = str;
    char *end  = str + j;
    while(start < end){
        if(*start != *end)
            return -1;
        start++;
        end--;
    }
    return j-i+1;
}
void ispalindrome(char *str){
    int length = 1, max = 1, start =0, i, j;
    for(i=0; i<= strlen(str) -2; i++){
        for(j= 1; j <= strlen(str)-1; j++){
            if(abs(i-j) > 1){
                length = palindromelength(str, i, j);
                if( length> max){
                    max = length;
                    start = i;
                }
            }
        }   
    }
    if(max > 1){
        printf("Largest palindrome is ");
        for( ; start <= j; start++){
            printf("%c", str[start]);
            start++;
        }
    }
    else
        printf("No palindromes in string.");
}

int main(void) {
    char a[50];
    char *a2;
    printf("Enter a string\n");
    scanf("%[^\n]", a);

    int length = strlen(a) + 1;
    a2 = (char*)malloc(length*sizeof(char));
    strcpy(a2, a);
    free (a2);

    char *a3 = &a;
    ispalindrome(a3);

    return 0;
}

我已经用一个简单的字符串“aracecar”单独尝试了palindromelength()palindromelength(a3, 0, 4) 返回 -1,所以这是正确的,palindromelength(a3, 0, 3) 返回 3,所以这是正确的,但是 palindromelength (a3, 1, 7) 返回 -1,这是错误的。我在堆栈溢出上仔细检查了我的函数和其他函数,看起来是正确的,可能是什么问题? 至于第二个函数 ispalindrome() 是否有更好的方法可以编写它?这看起来有点困惑,你知道吗。

我是新手,因此我可能还没有学到一些可以用来解决这个问题的更高级/复杂的变体。

最佳答案

我假设 int i 是字符串的起始索引,int j 是结束索引。如果是这样,请仔细查看 palindromelength() 函数的第一行。该函数是否可以从索引 0 以外的位置开始?

至于执行 ispalindrome() 函数的方法,有很多算法可以检查输入是否是回文,我建议您四处看看并找出不同的方法。如果你的方法有效,那就太好了!也许最干净的方法是使用递归,尽管这可能需要一些思考。

关于c - 字符串中最长的回文及其长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43219006/

相关文章:

c - 无需 Curses 即可对控制台图形进行动画处理

c - C如何评估这些程序?

c - 简单的程序段错误

c - 将 double 组写入文件时出现问题

c - Linux C套接字-Recvmsg-获取源ifindex

c - fscanf 如何知道这是行尾?

c - 在我输入 scanf 接受的输入后程序立即退出

c++ - 无法使用单独的文件夹获取生成文件以使头文件正常工作

c - 为什么 strcpy 采用 const char* 作为 src 而不是 char *?

c - fgets 在此之后没有停止\n