c - 使用 strtok 函数在 C 中拆分字符串

标签 c string split arguments

我正在尝试通过 {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) 打印最后一个空格和这个空格之间的所有字符。

您需要开始考虑不同的问题,即两层标记化。

  1. 搜索引号
  2. 在奇数字符串上,执行您的原始程序(搜索空格)
  3. 在偶数字符串上,盲目打印

在这种情况下,偶数编号的字符串(理想情况下)在引号内。 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/

相关文章:

c - 链接程序如何正确工作(微 Controller 上下文)?

string - 在 Go 中比较不等长的字符串

Java:split() 返回 [Ljava.lang.String;@186d4c1],为什么?

android - 如何通过逗号拆分字符串并在 Android 中的不同 EditText 中接收它们?

C:分配比需要更多的内存有好处吗?

c++ - 如何通过反汇编从 C++ 函数中获取 "lea"指令?

c - 为什么这个 Shaker Sort 代码在 C 中不起作用

regex - 正则表达式匹配字符串中的几个字符

c - 查找单词密度最高的文本

Ruby - 使用扫描拆分多个字符串