別の関数から文字列入力を取得し、回文の場合は 1 を返し、そうでない場合は 0 を返すこの関数 isPalindrome を作成しました。入力は任意の文字で、大文字が含まれる場合があります。この関数は、これらをソートし、アルファベット文字に基づいて回文であるかどうかを純粋にチェックすることを目的としています。
私はしばらくこれを行ってきましたが、何が問題なのかわかりません。関数全体は以下にありますが、出力を理解できません。最後のelseステートメントを完全にスキップすることがあります。ループを停止しますが、その理由はわかりません。アルファベット以外の文字を 2 つ続けて入力すると、変数 a または b が 2 回インクリメントされず、最後の else ステートメントに送られ、正しくない値が返されます。
情報を別の配列にもコピーせずに、この関数を作成しようとしています。
int isPalindrome(char s[])
{
int logic;
int a = 0;
int b = 0;
int num = 0;
int count = 0;
while ( s[b]!='\0' )
{
if ( isalpha(s[b]) != 0 )
{
num++;
}
b++;
}
b = b - 1;
printf("The number of characters is: %d\n", b);
printf("The number of alpha characters is: %d\n", num);
while ( count < num/2 )
{
if ( !isalpha(s[a]) || s[a] == ' ')
{
a++;
}
else
{
count++;
}
if ( !isalpha(s[b]) || s[b] == ' ')
{
b--;
}
if ( toupper(s[a]) == toupper(s[b]) )
{
printf("s[%d]: %c | s[%d]: %c\n", a, toupper(s[a]), b, toupper(s[b]));
a++;
b--;
if ( a == b )
{
logic = 1;
}
}
else
{
logic = 0;
break;
}
}
return logic;
}