簡體   English   中英

字符串中最長的回文及其長度

[英]Longest palindrome in a string and it's length

我有一個程序,應該通過一個字符串來識別可能的回文,檢查它是否是回文,然后從palindromelength()或-1返回長度palindromelength()如果不是),並打印出字符串的最長回文。 程序正在編譯,但輸出錯誤。

這是我的代碼

#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() palindrimelength(a3, 0, 4)返回-1,是正確的, palindromelength(a3, 0, 3) palindrimelength(a3, 0, 4) palindromelength(a3, 0, 3)返回3,是正確的,但是palindromelength(a3, 1, 7)返回-1,這是錯誤的。 我在堆棧溢出時與其他函數仔細檢查了我的函數,這似乎是正確的,可能是什么問題? 至於第二個函數ispalindrome() ,有沒有更好的方法可以寫那個呢? 似乎有點混亂,知道了。

我是新手,因此我可能還沒有學會解決此問題的一些更高級/更復雜的方法。

我假設int i是字符串的開始索引,而int j是結束索引。 如果是這樣,請仔細查看palindromelength()函數的第一行。 函數是否可以從索引0以外的其他地方開始?

至於執行ispalindrome()函數的方法,有很多算法可以檢查輸入是否為回文,我建議您環顧四周並找出不同的方法。 如果您的方法可行,那就太好了! 也許最干凈的方法是使用遞歸,盡管這可能需要一些思考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM