これは学校の宿題です。私は正しい答えを求めているのではなく、正しい方向へのプッシュを求めているだけです。なぜこれがうまくいかないのかについての説明は、正しい方法の説明と同様に素晴らしいでしょう. この C プログラムが行うべきことは、ユーザー入力をスペースや句読点なしで読み取り、それを文字配列 string に割り当てることです。次に、この配列を関数 palindrome に渡す必要があります。回文は文字列の長さである必要があり、1 または 0 のいずれかに等しい場合は TRUE を返すか、そうでない場合は 1 を返し、文字列の最初と最後の文字をチェックします。それらが一致する場合、2 番目と 2 番目から最後までの文字、およびその間のすべての文字を取得し、それを関数 palindrome に渡します。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
typedef int Bool;
Bool palindrome(char str[]);
main()
{
char string[1000], ch;
int i = 0;
printf("Enter a message: ");
while((ch = getchar()) != '\n'){
if(isspace(ch)==FALSE || ispunct(ch)==FALSE);
string[i] = tolower(ch);
i++;
}
string[i] = '\0';
printf("\n");
if(palindrome(string))
printf("Palindrome\n");
else
printf("Not a palindrome\n);
return 0;
}
Bool palindrome(char str[])
{
int length = strlen(str);
if((length == 1) || (length == 0))
return TRUE;
else
{
if((str[0] == str[length - 1])
{
char str_new[length-1];
int i, j;
for(i = 1, j = 0; str[i]!=str[length-1]; i++, j++)
str_new[j] = str[i];
str_new[i] = '\0';
palindrome(str_new);
}
else
return FALSE;
}
}
入力が何であれ、与えられた文字列が回文ではないことを常に出力します。たとえば、私が入力したとき
彼は悪魔として生きていましたね。
それは印刷されます
回文ではない
また、プログラムを編集して、前の入力を使用して配列文字列に何があったかを確認すると、
彼は悪魔として生きていましたね。
コード使用の改善が見られる私のコードの他の側面について自由にコメントしてください。彼らは本当に、はい、その権利があるか、私たちのコードには関係ないという以外には何も提供していません。
編集:
char配列stringの値が何であるかを確認しました。最後の引用の前にこれを言います。