Strings entklammern??
-
Hallo!!
Wie kann ich einen extern eingelesenen String (=ein Wort) entklammern (also erstes und letztes Zeichen löschen) und wie kann ich sicher gehen das der String wirklich eingeklammert war/ist??
Und wenn ich schon dabei bin:
Wie kann ich aus einer Textdatei 2-3 Zeilen (bestehend aus mehreren Worten)
eindeutig einlesen?? Hier möchte ich entweder alle Worte aus einer Zeile in verschiedenen Variablen (zeile1,zeile2...) abspeichern oder gar eine ganze Zeile in einer Variable wenn möglich.Vielen Dank für eure Hilfe!!
MfG RawBurner
-
char* wort, *ohne_klammern; size_t len; wort = einlesen (); len = strlen (wort); if (*wort == '(' && wort[len-1] == ')') { ohne_klammern = wort + 1; wort[len-1] = '\0'; } puts (ohne_klammern); aufraeumen (wort);
<spekulation>Du willst einen geklammerten Ausdruck weiter zerteilen. Dieser Ausdruck darf wieder geklammerte Ausdrücke enthalten. '(2 * (3 + 4))'. Hier solltest Du besser den String (rekursiv) 'runtersteigen' (google: Top-Down-Methode oder so).</spekulation>
Frage 2: fgets macht das. Du musst nur Überprüfen, ob ein '\n' im String vor dem Endmarker '\0' steht. Wenn nicht, musst Du deinen Puffer (z.B. mit realloc) vergrößern und fgets erneut auf den neuen Pufferbereich ansetzten und wieder prüfen ...
PS: Vielleicht solltest Du ein gutes C-Buch oder ein Tutorial lesen. Empfehlen kann ich dir aber eigentlich nichts ...
-
Danke für die schnelle Antwort!!
Die 2.Antwort klingt mir sehr logisch...nur hab ich halt keine Lektüre und vor allem keine Zeit. Kannst du mir bitte erklären wie das mit dem \n und \0 im Quellcode aussehen könnte? Ich habe da nicht die besten Erfahrungen gemacht,
bin ja noch Anfänger!Danke!
-
Das wird nicht so richtig schön, weil man mit der dynamischen 'Speicherverwaltung' von C zurechtkommen muss. Es reicht normalerweise schon ein
[code type="C++"]
char buf[2000]; /* irgendwas, was ausreichend groß ist /
char p;fgets (buf, sizeof buf, eine_datei);
if (p = strchr (p, '\n')) *p = '\0';/* In 'buf' steht nun eine Zeile */
[code]
-
Sehe ich das richtig dass das Prüfen auf \n in der if-Zeile geschieht?? Also wenn der Ausdruck in der Klammer falsch ist, was muß dann geschehen??
Entschuldige die Fragerei, aber ich bin noch kein Profi in diesen Sachen.Danke Danke Danke!
-
Also ich habe die Sachen ausprobiert!! Das mit dem entklammern klappt, super!!
Aber bei dem einlesen hab ich Probs:
pfile = fopen ("zeichnis.txt", "r");
char buf[2000];
char* p;fgets (buf, sizeof buf, pfile);
if (p = strchr (p, '\n')) *p = '\0';
printf ("%c", buf);In buf wird ein Zeichen (Ö) abgespeichert...was mache ich falsch??
Bitte nochmals um Hilfe!