基于引号标记字符串

Tokenize a string based on quotes

本文关键字:字符串 于引号      更新时间:2023-10-16

我正试图从文本文件中读取数据,并根据引号分割读取行。例如

"Hi how" "are you" "thanks"
预期输出

Hi how
are you
thanks
我代码:

getline(infile, line); 
ch = strdup(line.c_str());
ch1 = strtok(ch, " ");
while (ch1 != NULL)
{
    a3[i] = ch1;
    ch1 = strtok(NULL, " ");
    i++;
}

我不知道该指定什么作为分隔符字符串。我用strtok()来拆分,但是失败了。有人能帮我吗?

请看下面的示例代码。您应该提供""作为分隔符字符串来strtok。例如,

ch1 = strtok (ch,""");

可能您的问题与表示转义序列有关。请查看这里的字符转义序列列表

给定您的输入:"Hi how" "are you" "thanks",如果您使用strtok"""作为分隔符,它将把引号字符串之间的空格视为字符串,因此,如果(例如)您打印出结果字符串,每行一个,由方括号包围,您将得到:

[Hi how]
[ ]
[are you]
[ ]
[thanks]

。,每个引号字符串之间的空白字符本身被视为字符串。如果您提供给strtok的分隔符是" ""(即包括引号和空格),则不会发生这种情况,但是然后它也会在引号内的空格上断开。

假设你可以依赖于你关心的每一个项目被引用,你想跳过任何东西,直到你得到一个引号,忽略引号,然后读取数据到你的输入字符串,直到你得到另一个引号,然后重复整个过程。