String weiter verarbeiten
-
Ich möchte einen string[80] nach Kommas durchsuchen und alle Kommas mit Leerzeichen überschreiben. Die Funktion strchr liefert mir die Position des ersten Kommas. Ich will aber den restlichen String bis zum Ende durchsuchen und auch alle anderen Kommas überschreiben.
Mir ist nicht klar, wie ich a) weitersuchen kann und b)Über den zeiger, den strchr zurückliefert den "Wert", also das Komma mit einem Space überschreiben kann.Beispielcode:
int main(void) { char str[] = "Ein String, mit Kommas, ist gut"; printf("%s\n",strchr(str, (int)',')); return EXIT_SUCCESS;}
Kann mir jemand helfen? Danke
-
Schreib dir das am einfachsten selbst: Schleife über den String bis das aktuelle Zeichen \0 ist. Dabei alle Kommas mit Leerzeichen ersetzen.
-
for(char* p = str; *p; ++p) if(*p == ',') *p = ' ';
-
if (lerneffekt) applause();
*STILLE*
-
prog.c:3: error: ‘lerneffekt’ undeclared (first use in this function)
prog.c:3: error: (Each undeclared identifier is reported only once
prog.c:3: error: for each function it appears in.)
prog.c:4: warning: implicit declaration of function ‘applause’
-
Kein Thema:
unsigned int lerneffekt; void applause(); int main (void) { if (lerneffekt) applause(); return lerneffekt; }
Dann ist aber sowas von Stille
-
/home/DFYB3S/cczshee9.o: In function
main': prog.c:(.text+0x18): undefined reference to
applause'
collect2: ld returned 1 exit status
-
Scherzbolde.
Was das eigentliche Problem angeht, strchr gibt dir ja einen Zeiger auf das Komma zurück, das du ersetzen willst. Durch diesen Zeiger kannst du es dann überschreiben. Probier mal
char *p = strchr(str, ','); *p = ' '; puts(str);
Danach lässt sich der so gefundene Zeiger wieder als String interpretieren und erneut an strchr verfüttern (es ginge hier prinzipiell auch, str erneut zu durchsuchen, weil das erste Komma ja jetzt entfernt wurde, aber das Laufzeitverhalten dieses Vorgehens ist unnötig langsam). In einer Schleife sieht das dann beispielsweise so aus:
char *p; for(p = strchr(str, ','); p != NULL; p = strchr(p, ',')) { *p = ' '; }
-
siehe 314159265358979's Antwort von 13:30