Sauberer Weg, um entfernen Sie den Teilstring von str in C
Habe ich den folgenden string ID is a sample string remove to /0.10
möchte ich am Ende mit den folgenden: ID/0.10
.
Dies ist, was ich kam mit. Jedoch, ich bin auf der Suche nach einem sauberen/schöneren Weg, dies zu tun.
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "ID is a sample string remove to /0.10";
char *a = strstr(str, "ID");
char *b = strrchr (str, '/');
if (a == NULL)
return 0;
if (b == NULL)
return 0;
int p1 = a-str+2;
int p2 = b-str;
int remL = p2 - p1;
int until = (strlen(str) - p1 - remL) +1;
memmove (str+p1, str+(p1+remL), until);
printf ("%s\n",str);
return 0;
}
Rechts das, was ich suchte. Danke!
InformationsquelleAutor Kayla | 2012-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach der Bestimmung
a
undb
Sie vereinfachen diememmove
wie diese:Den Berechnungen, die Sie tun, auf die string-Längen sind nicht wirklich notwendig.
nicht bewusst, "/ ID"
Bitte beheben redundante Klammer am Ende der
memmove()
.danke, behoben
InformationsquelleAutor sth
Oder wenn Sie wie ein sehr dichtes version
while (*a ++ = *b ++);
ist definiert durch C-standard?Ich bin ziemlich sicher, dass sich frühe Implementierungen von strcpy verwenden, fragment. Wo sehen Sie ein problem? (OK, Sie haben, um die Warnung zu ignorieren) (siehe auch stackoverflow.com/questions/7962159/...)
Ohne die Räume, es ist eigentlich das K&R strcpy():
while (*a++ = *b++);
.wie es scheint, ist ok.
InformationsquelleAutor stefan bachert