Satz parsen
-
Hallo,
ich habe nochmal ein problem beim parsen, ich möchte aus einem Satz:
"Hallo wie gehts dir mir gehts gut"
so ein char machen:char [][] = {"Hallo\0", "wie\0", "gehts\0", ...};
ich habs so mal probiert, funktioniert aber leider noch nicht ganz.
Vielleicht könnte mir jemand helfen, wie ich das speicherschonend realisieren könnte.Vielen Dank,
lg
Genericchar incoming[] = {"Hallo wie gehts dir mir gehts gut"}; int main() { char result[67] = {"\0"}; char *pch = strtok (incoming, "\n"); while (pch != NULL) { strcat(result, pch); printf("--%s\n", pch); pch = strtok (NULL, "\n"); } printf("Das ist das resultat: %s\n", result); }
-
etwa so:
char incoming[] = "Hallo wie gehts dir mir gehts gut"; void main() { char *p; p = strtok (incoming, " "); while (p) { puts(p); // statt 'puts' den string irgendwo hinkopieren oder so p = strtok (0, " "); } }
-
Du könntest ein Array von Pointern auf ein
char
machen, wenn die Werte nicht verändert werden sollen:char *foo[] = {"Hallo", "wie", "gehts"};
Ansonsten machste ein ganz normales 2-dim Array, wobei du angeben musst, wie lang die Wörter sein können (im Bsp.: 9 Zeichen + '\0'):
char foo[][10] = {"Hallo", "wie", "gehts"};
Generic1 schrieb:
char [][] = {"Hallo\0", "wie\0", "gehts\0", ...};
Du brauchst bei Strings keine terminierende Null anzugeben, wie du es getan hast. Wird automatisch gemacht.
-
Hallo,
Also das mit dem Aufsplitten klappt jetzt, mir ist aber noch nicht ganz klar wie ich die Ergebnisse ("Hallo", "ich", "bis", ...) in das *result[30] char bekomme?
Ich muss ja da erst Speicher allokieren, dann in das Array schreiben und dann den Zeiger erhöhen, mir ist aber nicht klar, wie ich das am Besten (bzw. überhaupt) machen kann.
Wäre euch sehr dankbar für Hilfe in diese Richtung,lg
Genericchar *result[30]; char *p; int i = 0; p = strtok (incoming, " "); while (p) { strcpy(result, p); // Wie schreibe ich die Ergebnisse in das 2 dim Array result // puts(p); p = strtok (0, " "); }
-
// Wie schreibe ich die Ergebnisse in das 2 dim Array result
result
ist gar kein 2D-Array, sondern ein Array von 30 Zeigern auf Zeichen. Daher sollte Zeile 6 einen Compiler-Fehler ergeben.Mach es vielleicht etwa so:
char *result[30] = {0}; // alle 30 sind NULL char *p; int i = 0; p = strtok (incoming, " "); while (p) { result[i] = malloc(strlen(p) + 1); strcpy(result[i], p); p = strtok (0, " "); }
(ungetestet)
Irgendwann musst du dann aber für jeden Zeiger aus
result
, der nicht NULL ist, den Speicher zurückgeben.
-
Ich hatte vergessen, in Zeile 7
i
zu erhöhen. Also besser:strcpy(result[i++], p);
Oder so.
-
Besten Dank, klappt sehr gut,
eine Frage hätte ich noch,
wie kann ich die Länge des Arrays bestimmen um zu bestimmen wieviel Wörter in result gespeichert sindchar *result[30] = {0};
Mit sizeof(result); klappts nicht.
Vielen Dank,
lg
Generic
-
Generic1 schrieb:
wie kann ich die Länge des Arrays bestimmen um zu bestimmen wieviel Wörter in result gespeichert sind
Deklariere doch einfach eine zusätzliche Variable, die die Wörter zählt.