Diese Lösung hat zwei verschachtelte Schleifen von strtok_s
, weil strtok
nicht einspringt. Dies ist MSVC, einige Systeme implementieren die ähnliche strtok_r
.
Ich habe Ausgabe in Übereinstimmung mit der Oberseite Ihrer Frage geschaffen, dieses kann geändert werden, um anderen Ausgang zu entsprechen, es war nicht sehr klar. In diesem Fall war es nicht wirklich notwendig, zwei verschachtelte Schleifen zu haben, aber Ihre nachfolgenden Beispiele verwirren das Problem, indem Sie die komma-Eingabe auflösen.
#include <stdio.h>
#include <string.h>
int main(void) {
char c[] = "[1,2,3][5,7,8]";
char *tok1 = NULL;
char *tok2 = NULL;
char *end1 = NULL;
char *end2 = NULL;
int comma = 0;
char identifier = 'a';
tok1 = strtok_s(c, "[]", &end1);
while(tok1 != NULL) { // outer loop splitting [bracket] parts
printf("%c = [", identifier);
comma = 0; // control comma output
tok2 = strtok_s(tok1, ",", &end2);
while(tok2 != NULL) { // inner loop splitting ,comma, parts
if(comma) { // check if comma required
printf(",");
}
printf("%s", tok2);
comma = 1; // a comma will be needed
tok2 = strtok_s(NULL, ",", &end2);
}
printf("] //of type int %c[]\n", identifier);
identifier++;
tok1 = strtok_s(NULL, "[]", &end1);
}
return 0;
}
Die einfachere Programm, wo Sie brauchen nicht in den [Klammern] zu prüfen, ist die Ausgabe
#include <stdio.h>
#include <string.h>
int main(void) {
char c[] = "[1,2,3][5,7,8]";
char *tok = NULL;
char identifier = 'a';
tok = strtok(c, "[]");
while(tok != NULL) {
printf("%c = [%s] //of type int %c[]\n", identifier, tok, identifier);
identifier++;
tok = strtok(NULL, "[]");
}
return 0;
}
In beiden Fällen wird:
a = [1,2,3] //of type int a[]
b = [5,7,8] //of type int b[]
EDIT verändert die zweites Beispiel, um die Ausgabe gemäß dem obigen Kommentar von OP zu geben.
#include <stdio.h>
#include <string.h>
int main(void) {
char c[] = "[1,2,3][5,7,8]";
char *tok = NULL;
char identifier = 'a';
tok = strtok(c, "[]");
while(tok != NULL) {
printf("int %c[] = { %s };\n", identifier, tok, identifier);
identifier++;
tok = strtok(NULL, "[]");
}
return 0;
}
Programmausgang:
int a[] = { 1,2,3 };
int b[] = { 5,7,8 };
Können Sie bitte die erforderliche Ausgabe klären? Das syntaktisch inkorrekte Beispiel * input * wird im Codebeispiel geklärt, aber die erste Beispielausgabe wird als '// vom Typ int a []' kommentiert. Meinst du, dass die Ausgabe "int a [] = {1, 2, 3}" ist? Und das nächste Beispiel * "statt" * stimmt nicht mit dem ersten Beispiel überein. –
'strtok' wird nicht funktionieren, weil Sie nach einem Komma * oder *'] 'suchen müssen. 'strtok' kann das tun, aber es wird dir nicht sagen, welches es gefunden hat. Sie müssen also die Zeichenfolge selbst analysieren, indem Sie eine 'for'-Schleife verwenden, die jeweils ein Zeichen untersucht. – user3386109
@WeatherVane Ja, ich meinte ein [] = {1, 2, 3}. Entschuldigung für die Verwirrung. – user3213116