假设我有以下字符串:0:1,2,3
。
我想首先使用:
作为分隔符,并在到达第二部分时(即1,2,3
)进行分离,并尝试在其上使用strtok
(与{{1} })无法正常工作。
,
我得到的输出:
#include <stdio.h>
#include <stdbool.h>
int main(void){
char s[10];
strcpy(s, "0:1,2,3");
char* token1 = strtok(s, ":");
//To let me know it is on the second part
bool isSecondToken = false;
while (token1) {
printf("token1: %s\n", token1);
if(isSecondToken == true){
char* token2 = strtok(token1, ",");
while (token2) {
printf("token2: %s\n", token2);
token2 = strtok(NULL, " ");
}
}
token1 = strtok(NULL, " ");
isSecondToken = true;
}
}
预期输出:
token1: 0
token1: 1,2,3
token2: 1
token2: 2,3
答案 0 :(得分:3)
在更新token1
和token2
指针时,您需要使用相同的令牌分配器:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main(void){
char s[10];
strcpy(s, "0:1,2,3");
char* token1 = strtok(s, ":");
//To let me know it is on the second part
bool isSecondToken = false;
while (token1) {
printf("token1: %s\n", token1);
if(isSecondToken == true){
char* token2 = strtok(token1, ",");
while (token2) {
printf("token2: %s\n", token2);
token2 = strtok(NULL, ",");
}
}
token1 = strtok(NULL, ":");
isSecondToken = true;
}
}
strcpy
也需要string.h
库,因此您可能还会收到一些隐式声明的警告。