我正在使用strtok()函数将字符串拆分为Tokens。问题是当行中有2个分隔符时。
/* strtok example */ #include #include int main () { char str[] ="Test= 0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,,"; char * pch; printf ("Splitting string "%s" into tokens:n",str); pch = strtok (str,", "); while (pch != NULL) { printf ("Token = %sn",pch); pch = strtok (NULL, ", "); } return 0; }
并输出:
Splitting string "Test= 0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,," into tokens: Token = Test= Token = 0.28 Token = 0.0 Token = 1 Token = 1.9 Token = 2.2 Token = 1.0 Token = 8 Token = 4 Token = 42
有一些简单的方法来获取所有令牌;我需要知道是否有内部分隔符的原因导致我有时间,或者,xxx,
谢谢。
strtok()
明确地与你想要的相反。
在线手册中找到:
解析后的字符串中的两个或多个连续分隔符字节的序列被视为单个分隔符。 字符串开头或结尾的分隔符字节将被忽略。 换句话说:strtok()返回的标记总是非空的字符串。
strtok(3) – Linux手册页
我实现了strtoke()
– strtok()
一个变体,它的行为类似,但你做了你想要的:
/* strtoke example */ #include #include /* behaves like strtok() except that it returns empty tokens also */ char* strtoke(char *str, const char *delim) { static char *start = NULL; /* stores string str for consecutive calls */ char *token = NULL; /* found token */ /* assign new start in case */ if (str) start = str; /* check whether text to parse left */ if (!start) return NULL; /* remember current start as found token */ token = start; /* find next occurrence of delim */ start = strpbrk(start, delim); /* replace delim with terminator and move start to follower */ if (start) *start++ = ' '; /* done */ return token; } int main () { char str[] ="Test= 0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,,"; char * pch; printf ("Splitting string "%s" into tokens:n",str); pch = strtoke(str,", "); while (pch != NULL) { printf ("Token = %sn",pch); pch = strtoke(NULL, ", "); } return 0; }
在cygwin上用gcc编译和测试:
$ gcc -o test-strtok test-strtok.c $ ./test-strtok.exe Splitting string "Test= 0.28,0.0,1,,1.9,2.2,1.0,,8,4,,,42,," into tokens: Token = Test= Token = 0.28 Token = 0.0 Token = 1 Token = Token = 1.9 Token = 2.2 Token = 1.0 Token = Token = 8 Token = 4 Token = Token = Token = 42 Token = Token =
以上链接的另一个引用:
使用这些function时要小心。 如果您确实使用它们,请注意:
这些问题也适用于我的strtoke()
。
以上就是c/c++开发分享当一行中有2个分隔符时,将字符串拆分为C中的标记相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549179.html