Δημοσιεύτηκε: 06 Μαρ 2012, 00:56
από Ilias95
migf1 έγραψε:
Ilias95 έγραψε:Την έχω υλοποιήσει και εγώ ήδη: https://github.com/Ilias95/C-Exercises/ ... 08/pp_16.c
Όταν μάθω για pointers θα επιστρέψω. :)

Δεν λειτουργεί σωστά.

Π.χ. τα "aa" και "aaa" μου τα δίνει ως αναγραμματισμό (ενώ δεν είναι). Επίσης, αν η 1η λέξη είναι μεγαλύτερου μήκους από την 2η, κρασάρει το πρόγραμμα.

Αλλάζοντας μόνο την σύγκριση στο τελευταίο for πρέπει να δουλεύει σωστά:
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <ctype.h> // isalpha(), tolower()

#define NUM_ARR sizeof(string) / sizeof(string[0])

int main(void)
{
int i, string[26] = {};
char ch;

printf("Enter first word: ");
while ((ch = tolower(getchar())) != '\n') {
if isalpha(ch) {
for (i = 0; i < (int) NUM_ARR; i++) {
if (ch - 'a' == i)
string[i]++;
}
}
}

printf("Enter second word: ");
while ((ch = tolower(getchar())) != '\n') {
if isalpha(ch) {
for (i = 0; i < (int) NUM_ARR; i++) {
if (ch - 'a' == i)
string[i]--;
}
}
}

for (i = 0; i < (int) NUM_ARR; i++) {
if (string[i] != 0) {
printf("The two words are not anagrams");
return 0;
}
}

printf("The two words are anagrams");

return 0;
}

(Δηλαδή αλλάζοντας μόνο το "if (string[i] > 0)" σε " if (string[i] != 0)".)

Πάντως και με τον προηγούμενο κώδικα δοκίμασα πολλές περιπτώσεις με την 1η λέξη μεγαλύτερη απ' την δεύτερη και δεν κράσαρε.