我正在尝试通过 {white_space} 符号拆分一些字符串。 顺便说一句,在某些拆分中存在问题。这意味着,我想用 {white_space} 符号分割,但也想用引号引起来的子字符串。
例子,
char *pch;
char str[] = "hello \"Stack Overflow\" good luck!";
pch = strtok(str," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok(NULL, " ");
}
这会给我
hello
"Stack
Overflow"
good
luck!
但如你所知,我想要的是
hello
Stack Overflow
good
luck!
有什么建议或想法吗?
最佳答案
您需要标记化两次。您目前的程序流程如下:
1)搜索空间
2) 打印空格前的所有字符
3) 搜索下一个空间
4) 打印最后一个空格和这个空格之间的所有字符。
您需要开始考虑不同的问题,即两层标记化。
- 搜索引号
- 在奇数字符串上,执行您的原始程序(搜索空格)
- 在偶数字符串上,盲目打印
在这种情况下,偶数编号的字符串(理想情况下)在引号内。 ab"cd"ef 会导致 ab 为奇数,cd 为偶数......等等。
另一方面,记住你需要做什么,而你真正要寻找的(在正则表达式中)是“[a-zA-Z0-9\t\n]*”或者,[a-zA -Z0-9]+。这意味着两个选项之间的区别在于是否用引号分隔。所以用引号分开,并从那里识别。
关于c - 使用 strtok 函数在 C 中拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24083989/