Δημοσιεύτηκε: 06 Μαρ 2012, 00:56
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η λέξη μεγαλύτερη απ' την δεύτερη και δεν κράσαρε.