Unbestimmte Anzahl von Woertern in Feld -> Wie einzeln abspeichern?

einszwo

Grünschnabel
Hallo,

ich habe mir eine Linie aus einem Textfile eingelesen und als char line[256] abgespeichert. Mein Problem ist es nun, ich weiss nicht genau, wieviele Woerter in dieser Linie sind, moechte diese aber auf jeden Fall alle abspeichern.

Wenn ich sscanf verwende, muss ich ja immer genau wissen, wieviele Woerter wo stehen. zbsp: sscanf(line,"%s %s",parent,children);

Ich weiss, dass ich die line mit ner while-Schleife abarbeiten muss. Bin noch Anfaenger und wahrscheinlich ist es ziemlich trivial?!

Meine Linien aus der Textdatei sehen so aus:

root hips
hips hips1 hips2 hips3
hips1 chest
chest chest1 chest2 chest3
chest1 neck
neck head
chest2 leftcollar

Ich kann nie genau sagen, wieviele Woerte drin stehen, brauche die einzelnen Woerter aber, um meine Datenstruktur aufzubauen.
 
Ich weis ja nicht genau was du da machen willst, und was du wie speichern willst, für mich sieht das so aus als willst du eine Baumstruktur aufbauen. Ich will dir jetzt keine komplette Lösung präsentieren, dazu fehlt mir die Zeit und wo bleibt da für dich der Spaß und Lerneffekt, aber als Lösungsvorschlag: Ich würde den Buffer in dem du die Zeile eingelesen hast (also line[256]) vom Index 0 an in einer Schleife durchlaufen und auf die Leerzeichen achten (Hex: 0x20), dann hast du zumindest die Worte (und die Länge eines Wortes kannst du zusätzlich gleich mit bekommen bzw man kann die einzelnen Bytes gleich in einen 2 Buffer kopieren und dann beim finden von 0x20 ein 0x00 dahinter schreiben und hat dann im 2. Buffer das einzelne Wort) und die kannst du dann, wohin auch immer, einzeln speichern. Wenn du dann auf EOL triffst oder der Index > 255 ist brichst du das ganze ab (oder holst die nächste Zeile und machst das ganze nochmal) Wenn du die die Anzahl der Leerzeichen und EOLs merkst weißt du auch die Anzahl der Worte, falls das noch benötigt wird.

Ich hoffe das hilft dir
Byteblaster
 
Versuch's mal damit:
Code:
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
	char line[256] = {"chest chest1 chest2 chest3\n"};
	char words[10][30];
	int cnt = 0; // Die Anzahl der Wörter
	int i = 0; // Position in der line
	int pos = 0; // Posotin in words
	char c;

	while(c = line[i++]) {
		if(c > 0x20)
			words[cnt][pos++] = c;
		else {
			while((c = line[i++]) <= 0x20) { // Leerzeichen usw. auslassen
				if(!c)
					break;
			}
			i--;
			words[cnt++][pos] = 0;
			pos = 0;
		}
	}

	for(i = 0; i < cnt; i++)
		printf("%02d: %s\n", i+1, words[i]);
	printf("(%d Words)\n", cnt);

	return EXIT_SUCCESS;
}
 
Muss es unbedingt C sein?
Wenn nein bietet dir C++ viele elegantere und einfach zu handelnde Methoden an
um das zu realiesieren.
Zwei Stichwort wären vector und string. Also du speicherst jedes Wort in einem String
und fügst diesen dann in einen vector ein. Vorteil dieser Methode ist das vector ein
dynamischer Datentyp ist und somit du beliebig viele Wörter dazuadden und wieder
rauslöschen kannst.

Wie diese funktionieren kannst du hier
nachschauen...

Viele Grüße

RedWing
 
Redwing bedenke, dass C++ Klassen für einen Einsteiger nicht wirklich durchschaubar sind. (Ich finde die Klassen fast albern, weil man sie am Anfang, wenn man sie wirklich braucht nicht anwenden kann und später bastelt man sich seine Algorithmen selbst und braucht sie nicht mehr).
 
Zurück