Girilen iki sözcüğün anagram olup olmadığını belirleme konusunda sorun yaşıyorum.Dizideki tüm öğelerin sıfır olup olmadığını kontrol etme
#include <stdio.h>
#include <string.h>
int main() {
char ch;
int letter_count[26] = {0};
int i;
int sum = 0;
printf("Enter first word: ");
do
{
scanf("%c", &ch);
letter_count[ch - 'a']++;
} while (ch != '\n');
for(i = 0; i < 26; i++)
printf("%d ", letter_count[i]);
printf("\n");
printf("Enter second word: ");
do
{
scanf("%c", &ch);
letter_count[ch - 'a']--;
} while (ch != '\n');
for(i = 0; i < 26; i++)
printf("%d ", letter_count[i]);
for(i = 0; i < 26; i++)
if(letter_count[ch] != 0)
sum++;
if (sum == 0)
printf("anagrams");
else
printf("not anagrams");
}
Kodun bir kısmını yaparken kullanmam gerekir. İki kelimeyi girebilir ve dizideki öğeleri basar, böylece "Yatak" ve "En Akıllı" birlikte tüm elemanların sıfır olmasını sağlar. Bununla birlikte, son kısımda sorun yaşıyorum, bu da tüm elemanların sıfır olup olmadığını kontrol etmek için üçüncü bir döngü kullanmaktır.
Elden önce bir öğe bildirebileceğimi ve bir elemanın sıfır olmadığı her durumda artış gösterebileceğimi düşündüm ve sıfırdan büyük herhangi bir toplamın bir anagram olamamasını sağladım. Ancak, her zaman benim için anagramı yazdırır.
Sınır dışı erişim nedeniyle tanımsız davranış. – EOF
'sum ++ 'öğesini' bad = true' ile değiştirin. Büyük harfleri küçük harfe dönüştürdüğünüzden emin olun. – user3386109
@ user3386109: 'letter_count [ch -' a '] 'öğesine * erişildiğinden * önce, döngü-kontrol' ch! =' \ N '',' ch' küçük harfe dönüştürmek pek yardımcı olmaz. – EOF