文字列を調べて、可能なパリンドロームを特定し、それがパリンドロームかどうかをチェックし、長さを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)
は3を返しますが、palindromelength(a3, 1, 7)
は-1を返します。間違っています。私はスタックのオーバーフローで他のものと私の関数をダブルチェックし、それが正しいように、何が問題になる可能性がありますか? 第2の機能に関しては、ispalindrome()
があります。私はそれを書くより良い方法はありますか?ちょうどちょっと面倒なことが分かりました。
私は初心者ですから、これを解決するためにもっと高度で洗練されたバリエーションをまだ学んでいないかもしれません。
デバッガの使い方を学びます。別のコード行を書く前にそれを学んでください。それは不可欠なスキルです。 @ThingyWotsit。 – ThingyWotsit
私は個人的なラップトップで学び始めましたが、私はラップトップを街から忘れてしまい、週末までは持ち歩くことはできません。今のところ私はデバッガにアクセスできない学校のコンピュータを使用していますが、私の教授は構文のハイライトとコンパイラのみを使用できます。だから私はここにきて助けに来た。 – JOhAnn4187
教授に、誰もが時間を無駄にしていると教えてください。デバッグに関する次の講義を行い、必要なツールを使用できるようにする必要があります。 – ThingyWotsit