Leerzeichen löschen
-
Wie würdet ihr vorgehen um die Lehrzeichen vor und hinter einem String zu löschen.
" Dies ist ein String "
soll
"Dies ist ein Stirng"
werden.
-
So ich würde sagen..... wenn du das ein String mit einer festen Länge wäre, würde ich den String durchlaufen und immer mit "if" abfragen, ob ein Leerzeichen vorliegt oder nicht.
Dann bei zutreffendem Leerzeichen einfach das Zeichen löschen !
-
Hi,
ich würds so machen!
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(void) { char p[21]={" Das ist ein String "}; printf("%s\n", p); strncpy(p,p+1,strlen(p)-1); p[strlen(p)-2]='\0'; printf("%stest\n", p); return 0; }
b4sh0r
-
kannst den string auch lassen wie er ist, das ende nullterminieren und dir einfach nen zeiger nehmen und auf den auf den anfang zeigen lassen.. dann brauchst du auch nicht wild speicher umzukopieren...
-
siehe Windalfs beitrag
Hierzu Code:char *string= " Dies ist ein string "; string= string[1]; string[strlen(string)-2]= '\0';
Auch gibts da noch Möglichkeiten mit strchr() und strrchr()
Gruss
-
also ich glaube kaum das das ne gute idee ist
char *string= " Dies ist ein string ";
string= string[1];in dem fall ist das const auch wenn du es nicht expliziet hinschreibst... davon abgesehen liefert dir string[1] nicht die adresse sondern das erste element des "strings"... musst also schon noch extra einen zeiger spendieren und diesen auf die adresse des ersten elementes zeigen lassen...
und noch ne kleine randbemerkung... der aufgabensteller sprach von leerzeichen wobei nicht klar gesagt ist ob es am anfang und ende jeweils nur 1 leerzeichen zuviel gibt oder ob es auch mehrere sein können... in dem fall müsste man schon entsprechend von hand durchsuchen wann das erste zeichen ungleich ' ' und das letzte zeichen ungleich ' ' erscheint...
-
Hallo,
interessant, daß keiner die Idee hatte, das ganze von einer Bibliotheksfunktion erledigen zu lassen, in dem man die Whitespace-Behandlung von sscanf ausnutzt:
char s[] = " Hallo "; char trim[255] = {0,}; sscanf(s, "%s", trim); /* trim ist jetzt ohne führende und nachfolgende Leerzeichen */
MfG
-
..und bei strcpy/strncpy duerfen sich die Speicherbereiche nicht ueberlappen. Da gibts memmove fuer.
-
#include <stddef.h> void trim( char* dst, size_t dst_size, const char* src ) { char* d = dst; char* end; const char* s = src; if ( dst_size == 0U ) return; end = dst + ( dst_size - 1U ); while ( *s == ' ' || *s == '\t' ) ++s; while ( d < end && *s != '\0' ) *d++ = *s++; while ( d > dst && ( d[-1] == ' ' || d[-1] == '\t' ) ) --d; *d = '\0'; }