Vollständige Version anzeigen : [C] Feststellen ob Wort Singular/Plural ist


LuZi
19.01.2015, 14:29

Aloha Leute!

Habe folgendes Problem:
Muss für die Schule ein Programm schreiben, welches eine Textdatei einliest und Wörter zählt(gleiche Wörter werden addiert) und dieses Ergebnis in einer textdatei wie folgt ausgibt:
Haus 3x
Garten 1x
Mensch 2x
.
.
.
Ich bin soweit, dass er die Wörter & Zeichen zählt. Die Ausgabe in txt form werde ich auch noch schaffen.
Nur habe ich das Problem, dass ich keine Ahnung habe, wie ich es schreiben soll, dass Wörter im Plural "singularisiert" werden sollen.
=> Häuser = Haus (counter++)

Mein Plan wäre eine Liste einzulesen wo sämtliche deutschen Wörter inkl. Plural aufgeführt sind, die ich dann vergleichen kann. Aber irgendwie erscheint mir dies zu rechenintensiv.

Wie würdet ihr das machen?

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Epidrome
19.01.2015, 16:18

Hi,
ich wurde es auch wie du schon erwähnt hast eine Liste machen.
Aber wenn ich richtig verstanden habe sollen gleich Wörter addiert werden.
Häuser != Haus

Also ich habe mal so eine ähnliche Aufgabe gesehen, und da werden nur gleiche Wörter addiert.
Also Haus ist nicht gleich Häuser, genau wie Maus nicht gleich Mäuse ist.

Außer es wird explizit vorher gesagt.

Sonst wenn es sein muss, dann zweidimensionales Array z;B;: [Häuser][Haus],[Mäuse][Maus].
Aber irgendwie erscheint mir dies zu rechenintensiv
Hast leider keine andere Wahl dann.


MFG Epi.


LuZi
19.01.2015, 16:56

ok danke erstmal für die Antwort.
Es sollte nur das "Grundwort" hochgezählt werden.
Kurz gesagt:
Haus kommt vor = Haus(1x)
Mensch kommt vor = Mensch(1x)
Häuser kommt vor = Haus(2x)
.
.
.
da das Singular/Plural Problem nur nebensächlich ist (wird nicht zwingend verlangt)konzentriere ich mich jetzt
auf ein anderes Problem.

Ich muss, sofern ein Wort 2 mal vorkommt den Counter im struct hochzählen.
Nur, wie finde ich raus, ob dieses Wort bereits erfasst wurde oder ob es neu ist?

Anbei ein Auszug meines Codes:

if ( NULL != datei )
{
while( (zakt=fgetc(datei)) !=EOF) { // Liest Stück für Stück aus textdatei aus

if (zakt == ' '|| zakt == '!' || zakt == '?' || zakt == ';') // Liest das Wort aus und speichert es ins Hilfsarray
{
hilfsarr[buchstabe] = '\0';
wortanzahl++;
buchstabe = 0;
x = hilfsarr;
struct begriff x;
strcpy(x;wort, hilfsarr);
x;counter=x;counter++;
printf("%s\n", x;wort);
fprintf(result, "'%s' kommt %d -mal vor \n", x;wort, x;counter);

}
else
{
hilfsarr[buchstabe] = zakt;
buchstabe++;

zges++;

}


Epidrome
20.01.2015, 13:11

Hi,
habe mal gesucht und das wurde mehrmals angezeigt.
Das solltest du bei dir einbauen können.

typedef int (*cmpfunc)(void *, void *);

int in_array(void *array[], int size, void *lookfor, cmpfunc cmp)
{
int i;

for (i = 0; i < size; i++)
if (cmp(lookfor, array[i]) == 0)
return 1;
return 0;
}

int main()
{
char *str[] = {"this is test", "a", "b", "c", "d"};

if (in_array(str, 5, "c", strcmp))
printf("yes\n");
else
printf("no\n");

return 0;
}


Hier solltest du es für dich anpassen.

if (in_array(str, 5, "c", strcmp))
printf("yes\n"); // <-- Hier wenn das Wort in array drin ist. Hochzählen.
else
printf("no\n"); // <-- Hier wenn das Wort noch nicht drin ist. Neu anlegen.



MFG Epi.


LuZi
20.01.2015, 15:17

ah ok. also komm ich ohne Pointer nicht aus. dann muss ich mir wohl dieses Kapitel nochmal durchlesen. Danke dir.


Epidrome
20.01.2015, 15:26

Hi,
das sollte auch ohne Pointer gehen.
Ich habe jetzt nur einen Beispiel gepostet was mehrmals angezeigt wurde.
Du könntest das auch ohne Pointer machen.
(
;c-buch;sommergut~de/Kapitel8/Zusammenhang-zwischen-Pointern-und-Arrays;shtml
)

Hätte ich keinen Beispiel gefunden, dann hätte ich dir das mit Array und eine Methode programmiert.

P;S;:
Brauchst du es ohne Pointer, dann könnte ich was coden???

MFG Epi.


LuZi
20.01.2015, 15:30

im Grunde ist es egal wie wir es machen, jedoch sollten wir es möglichst alleine machen. Von dem her: danke für das Angebot, aber ich habe noch 2 Wochen Zeit und bis dahin werde ich es wohl irgendwie noch schaffen (hoffe ich).


Epidrome
20.01.2015, 15:38

Hi,
Das finde ich gut:
jedoch sollten wir es möglichst alleine machen

Dann ein Tipp:
- Schreibe ein Global-Array.
- Schreibe eine Methode wo du das Wort übergibst und mit schleife in Array überprüfst.
- Wenn es drin ist Hochzählen, wenn nicht Neu anlegen.

GL & HF noch.

MFG Epi.


Ähnliche Themen zu [C] Feststellen ob Wort Singular/Plural ist
  • feststellen ob Grafikkarte defekt ist?
    moin moin, habe folgendes problem : habe mir jetzt ne wakü in mein sYstem eingebaut. hat auch alles funktioniert war dicht usw. habe auch 4 tage lang gezockt gar kein thema... grad habe ich ein video geschaut als der pc mit einmal ausging. ich mir nichts bei gedacht und wollte neu starten er gin [...]

  • Serverstandort feststellen.
    hallo zusammen.... wie kann ich nen server standort von meinem pub feststellen??? möcht gern wissen ob der in GERMANY steht oder in USA oder so thx schonmal [...]

  • letztes wort gleich erstes wort
    Hallo, mir ist gerade ein neues Spiel eingefallen. Also, es geht so: Ich schreibe z. B. "Weihnachten ist schön" und der nächste würde dann schreiben "Schön fänd ich es, wenn es schon vorbei wär". Dann könnte z. B. kommen "Wär es vorbei, wär ja schon fast Ostern" und dann weiter "Ostern i [...]

  • Plural von Exclamatio
    Weiß einer, wie der Plural von "Exclamatio" lautet? Gemeint ist das Stilmittel. Bitte keine Sachen wie: Ich glaube, es ist "Exclamatios", sondern bitte begründen oder angeben woher die Informationen stammen [...]



raid-rush.ws | Imprint & Contact pr