我有一個程序,應該通過一個字符串識別可能的迴文,檢查它是否是迴文,然後返回長度從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()
有沒有更好的方法我可以寫那個?這看起來似乎有點混亂。
我是一個新手,因此我可能還沒有學到一些更先進/複雜的變化,我可以採取解決這個問題。
瞭解如何使用調試器。在編寫另一行代碼之前,請先了解它。這是一項關鍵技能。 – ThingyWotsit
@ThingyWotsit。我已經開始在我的個人筆記本電腦上學習,但是我忘記了我的筆記本電腦離開了城市,直到本週末纔會有筆記本電腦。現在我使用學校電腦,因爲我沒有調試器,我的教授只允許我們使用語法高亮和編譯器。所以我來到這裏尋求幫助。 – JOhAnn4187
請告訴你的教授他/她在浪費每個人的時間。他/她應該在接下來的幾個講座上進行調試,並允許您使用必要的工具。 – ThingyWotsit