これは私がcで作った回文チェッカーです。最後の項目が句読点である場合を除いて、句読点を持つかどうかを問わず、すべての入力に対して機能します。この場合、それをスキップして比較して、それが実際には回文ではないと言います。 EX(生きて、悪魔は回文ではありませんが、生きて、悪魔になります)。ポインタを使用して、最後にのみ句読点を比較するパインドーム
あなたのコードの主な問題は、次の行にある#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#define max 180
bool is_palindrome(const char *message);
int main()
{
char message[max+1];
printf("Enter a message: ");
gets(message);
if(!*message)
{
printf("input error");
return 0;
}
if (is_palindrome(message)) printf("Palindrome\n");
else printf("Not a palindrome");
return 0;
}
bool is_palindrome(const char *message)
{
char *p, *p2;
bool palindrome = true;
p = message;
p2 = message;
for(;;)
{
while(*p)p++;
while(*p2)
{
while(!isalpha(*p)) p--;
while(!isalpha(*p2)) p2++;
if (toupper(*p) != toupper(*p2))
{
palindrome = false;
break;
}else
{
p--;
p2++;
}
}
break;
}
return palindrome;
}
'gets'は使用しないでください。私たちにそれをしないでください。それは危険な関数なので、C標準から削除されています。可能であれば、['fgets'](http://en.cppreference.com/w/c/io/fgets)を使用してください。 –
私は、K.N.による、近代的アプローチの教科書をCプログラミングから学んできました。キングだからこそ、私はフルラインを読むのに使われるようにその機能を選んだのです。しかし、それは将来の参考のために知って良いです、ありがとう。 – OliviaA
[取得機能が危険なので、使用しないのはなぜですか?](https://stackoverflow.com/q/1694036/995714) –