C - 确定使用哪个分隔符 - strtok()

2024-02-09

假设我正在使用strtok()像这样..

char *token = strtok(input, ";-/");

有没有办法确定实际使用了哪个令牌?例如,如果输入类似于:


Hello there; How are you? / I'm good - End  

我可以找出每个标记使用了哪个分隔符吗?我需要能够输出特定的消息,具体取决于令牌后面的分隔符。


重要的:strtok不可重入,你应该使用strtok_r http://www.mkssoftware.com/docs/man3/strtok_r.3.asp而不是它。

您可以通过保存原始字符串的副本,并查看当前标记到该副本的偏移量来完成此操作:

char str[] = "Hello there; How are you? / I'm good - End";
char *copy = strdup(str);
char *delim = ";-/";
char *res = strtok( str, delim );
while (res) {
    printf("%c\n", copy[res-str+strlen(res)]);
    res = strtok( NULL, delim );
}
free(copy);

这打印

;
/
-

Demo #1 http://ideone.com/AEROJ

EDIT: 处理多个分隔符

如果您需要处理多个分隔符,则确定当前分隔符序列的长度会变得稍微困难​​:现在您需要在确定分隔符序列的长度之前找到下一个标记。数学并不复杂,只要你记住了NULL需要特殊处理:

char str[] = "(20*(5+(7*2)))+((2+8)*(3+6*9))";
char *copy = strdup(str);
char *delim = "*+()";
char *res = strtok( str, delim );
while (res) {
    int from = res-str+strlen(res);
    res = strtok( NULL, delim );
    int to = res != NULL ? res-str : strlen(copy);
    printf("%.*s\n", to-from, copy+from);
}
free(copy);

Demo #2 http://ideone.com/U5PBTr

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C - 确定使用哪个分隔符 - strtok() 的相关文章

随机推荐