Es gibt eine Vielzahl von Möglichkeiten, das Problem anzugehen. Gehen Sie mit einem Zeigerpaar durch die Zeichenfolge, um die Begrenzer zu finden, und stellen Sie eine große Anzahl von Zeichenfolgenfunktionen bereit, die in string.h
bereitgestellt werden. Sie können wie strpbrk
Verwendung von Zeichen Suchfunktionen wie strchr
oder String-Suchfunktionen machen, Sie Tokenisieren Funktionen wie strtok
verwenden können, etc ...
Schauen Sie vorbei und lernen von ihnen allen. Hier ist eine Implementierung mit strpbrk
und eine Zeigerdifferenz. Es ist nicht destruktiv, Sie müssen also keine Kopie der ursprünglichen Zeichenfolge erstellen.
#include <stdio.h>
#include <string.h>
int main (void) {
const char *line = "'foobar'|cat";
const char *delim = "'"; /* delimiter, single quote */
char *p, *ep;
if (!(p = strpbrk (line, delim))) { /* find the first quote */
fprintf (stderr, "error: delimiter not found.\n");
return 1;
}
p++; /* advance to next char */
ep = strpbrk (p, delim); /* set end pointer to next delim */
if (!p) { /* validate end pointer */
fprintf (stderr, "error: matching delimiters not found.\n");
return 1;
}
char substr[ep - p + 1]; /* storage for substring */
strncpy (substr, p, ep - p); /* copy the substring */
substr[ep - p] = 0; /* nul-terminate */
printf ("\n single-quoted string : %s\n\n", substr);
return 0;
}
Beispiel Verwendung/Output
$ ./bin/substr
single-quoted string : foobar
Ohne string.h Mit
Wie oben erwähnt, können Sie auch einfach zu Fuß ein Paar Zeiger auf der Zeichenfolge und lokalisieren Sie Ihre Paare von Anführungszeichen auf diese Weise.Der Vollständigkeit halber ist hier ein Beispiel mehrere Strings in Anführungszeichen innerhalb einer einzigen Zeile zu finden:
#include <stdio.h>
int main (void) {
const char *line = "'foobar'|cat'mousebar'sum";
char delim = '\'';
char *p = (char *)line, *sp = NULL, *ep = NULL;
size_t i = 0;
for (; *p; p++) { /* for each char in line */
if (!sp && *p == delim) /* find 1st delim */
sp = p, sp++; /* set start ptr */
else if (!ep && *p == delim) /* find 2nd delim */
ep = p; /* set end ptr */
if (sp && ep) { /* if both set */
char substr[ep - sp + 1]; /* declare substr */
for (i = 0, p = sp; p < ep; p++)/* copy to substr */
substr[i++] = *p;
substr[ep - sp] = 0; /* nul-terminate */
printf ("single-quoted string : %s\n", substr);
sp = ep = NULL;
}
}
return 0;
}
Beispiel Verwendung/Output
$ ./bin/substrp
single-quoted string : foobar
single-quoted string : mousebar
Schauen Sie alle Antworten auf und lassen Sie uns wissen, wenn Sie Fragen haben, .
http://www.cplusplus.com/reference/cstdio/sscanf/ –
@ Ich bin froh, dass Sie die Frage verstanden haben. Ich entschied mich für 'sscanf'. –