Längstes Wort aus Textdatei feststellen.
-
Hallo Leute,
ich darf in meinem Studium C Programmieren und bin gerade an eine Stelle gestoßen, die mir einige Probleme bereitet. Ich hoffe die Frage wurde nicht schon tausend mal gestellt, über die Suche hab ich zwar ähnliches gefunden, konnte damit aber nicht viel anfangen.
Die Aufgabe:
Schreiben Sie eine Funktion, die aus einer Textdatei das längste Wort heraussucht und zurückgibt.
Die Grundlagen zur Dateiverarbeitung habe ich mir bereits angeeignet, Funktionen sind auch kein Problem. Konkret macht mir die Feststellung des längsten Wortes Probleme.
Spontan wäre mir eingefallen:
- In Arrays einlesen, strcmp -> fällt aber vmtl. weg, da es ja viele Wörter sind?
- Die Werte des Zeigers bis zum nächsten Leerzeichen (zwischen Wörtern) merken und vergleichen, bzw. der größe nach sortieren und den größten Wert ausgeben
Aber naja - wenn ich es hinbekommen hätte würde ich nicht hier schreiben. Ich wäre über Denkanstöße sehr erfreut und dankbar :)!
mfG
Chris
-
Lies die Datei Zeichenweise ein.
Beim ersten Zeichen das zu einem Wort gehört setzt du einen Zeiger auf die Position. Von dort an zählst du wie viele Zeichen es sind bis zum ersten Zeichen das nicht zu einem Wort gehört. Dann vergleichst du dein gerade gefundenes Wort mit dem größten bisher gefundenen Wort und so wieder von vorne bis die Datei zu ende ist.Kein sortieren. Kein unnötiger Speicherverbrauch.
-
Endlich mal jemand, der seine Frage nicht mit Orthografiefehlern in jedem Wort stellt.
Du hast recht, das ist ein sehr einfaches Problem, das schon oft vorkam.
Die Fragestellung ist aber (aus C Sicht) unklar, schönen Gruß an deinen Lehrer.
Die Definition von "Wort" ist unklar, wenn gemeint ist, dass ' ','\t','\n','\r','\v' gleichberechtigt Trennzeichen darstellen, dann resultiert die Aufgabe in einem Einzeiler:... lies alle Wörter bis zum Ende der Datei und merke dir das jeweils längste in einer Variablen (dazu nimmt man strlen, wieso nimmst du strcmp?).
Was soll passieren, wenn es mehrere "längste" Wörter gibt?
( -> schönen Gruß an deinen Aufgabensteller )char wort[1000],lwort[1000]=""; ... while( 1==scanf("%999s",wort) ) if( strlen(wort)>strlen(lwort) ) strcpy(lwort,wort);
Aufrufen kann du das Programm dann einfach
programm < datei.txt
und sparst dir so das ganze FILE Geraffel im Code.
-
Dankeschön euch beiden! So schnell hätte ich gar nicht mit Antworten gerechnet :).
Huch, ich meinte natürlich strlen!
Ich werde das ganze direkt umsetzen, danke nochmals!
mfG
Chris