プログラムは、2つの異なる配列に格納された2つの単語を入力するように求めます。 単語がアナグラムの場合は「アナグラム」を、そうでない場合は「アナグラムでない」を印刷します。私はすべてのアルファベット文字の配列を作った、文字 'a'は{1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...}文字の全体の配列を埋めるように格納されます。C 2つの単語がアナグラム(内部のコード)であるかどうかを調べるプログラム
次に、両方の配列を比較して、それらが同じ文字であるかどうかを調べて、それぞれの文字を差し引いたかどうかを判断し、0であればそれらはアナグラムです。 これまでの私のコードは、私が間違っているのか分かりません。ブール関数に何か間違いがあると私は確信しています。
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
void read_word(int counts[26])
{
int i;
char ch;
printf("Enter a word: ");
for(i=0;(ch=getchar()) != '\n' && i<30; i++)
counts[toupper(ch)-'A']++;
}
bool equal_array(int counts1[26],int counts2[26])
{
int i;
bool is_anagram=false;
for(i=0; i<30; i++)
{
counts1[i]= counts1[i] - counts2[i];
if(counts1[i] == 0)
{
is_anagram=true;
}
else
{
is_anagram=false;
break;
}
}
return is_anagram;
}
int main()
{
int first_word[26]={0};
int second_word[26]={0};
read_word(first_word);
read_word(second_word);
if(equal_array(first_word,second_word) == true)
printf("Anagram");
else
printf("Not Anagram");
return 0;
}
ご迷惑をおかけして申し訳ありません。