如何在C中将字符串拆分为标记?
如何在C中用'&'
将字符串拆分为标记?
strtok / strtok_r
char *token; char *state; for (token = strtok_r(input, "&", &state); token != NULL; token = strtok_r(NULL, "&", &state)) { ... }
我会这样做(使用strchr()
):
#include char *data = "this&&that&other"; char *next; char *curr = data; while ((next = strchr(curr, '&')) != NULL) { /* process curr to next-1 */ curr = next + 1; } /* process the remaining string (the last token) */
strchr(const char *s, int c)
返回指向s
中c
的下一个位置的指针,如果在s
找不到c
则返回NULL
。
您可能可以使用strtok()
,但是,我不喜欢strtok()
,因为:
- 它修改了被标记化的字符串,因此它不适用于文字字符串,或者在您希望将字符串保留用于其他目的时不是非常有用。 在这种情况下,您必须先将字符串复制到临时字符串。
- 它合并了相邻的分隔符,因此如果你的字符串是
"a&&b&c"
,则返回的标记是"a"
,"b"
和"c"
。 请注意,"a"
后没有空标记。 - 它不是线程安全的。
您可以使用strok()函数,如下例所示。
/// Function to parse a string in separate tokens int parse_string(char pInputString[MAX_STRING_LENGTH],char *Delimiter, char *pToken[MAX_TOKENS]) { int i; i = 0; pToken[i] = strtok(pInputString, Delimiter); i++; while ((pToken[i] = strtok(NULL, Delimiter)) != NULL){ i++; } return i; } /// The array pTokens[] now contains the pointers to the start of each token in the (unchanged) original string. sprintf(String,"Token1&Token2"); NrOfParameters = parse_string(String,"&",pTokens); sprintf("%s, %s",pToken[0],pToken[1]);