2017-04-04 16 views
0

我有一個程序,應該通過一個字符串識別可能的迴文,檢查它是否是迴文,然後返回長度從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()分開。 palindrimelength(a3, 0, 4)返回-1所以這是正確的,palindromelength(a3, 0, 3)返回3所以這是正確的,但palindromelength(a3, 1, 7)返回-1,這是錯誤的。我重複檢查了我的函數與堆棧溢出的其他人,這似乎是正確的,可能是什麼問題? 至於第二個功能ispalindrome()有沒有更好的方法我可以寫那個?這看起來似乎有點混亂。

我是一個新手,因此我可能還沒有學到一些更先進/複雜的變化,我可以採取解決這個問題。

+1

瞭解如何使用調試器。在編寫另一行代碼之前,請先了解它。這是一項關鍵技能。 – ThingyWotsit

+0

@ThingyWotsit。我已經開始在我的個人筆記本電腦上學習,但是我忘記了我的筆記本電腦離開了城市,直到本週末纔會有筆記本電腦。現在我使用學校電腦,因爲我沒有調試器,我的教授只允許我們使用語法高亮和編譯器。所以我來到這裏尋求幫助。 – JOhAnn4187

+0

請告訴你的教授他/她在浪費每個人的時間。他/她應該在接下來的幾個講座上進行調試,並允許您使用必要的工具。 – ThingyWotsit

回答

0

我認爲int i是字符串的起始索引,int j是結尾索引。如果是這樣,仔細看看你的palindromelength()函數的第一行。函數能否從索引0以外的地方開始?

至於執行ispalindrome()函數的方法,有許多算法用來檢查輸入是否是迴文,我建議查看並找出不同的方法。如果你的方式有效,太棒了!可能最簡潔的方法是使用遞歸,儘管這可能需要一些思考。