基于引号对字符串进行标记

时间:2013-04-10 05:15:09

标签: c++

我正在尝试从文本文件中读取数据并根据引号拆分读取行。例如

"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()进行拆分,但失败了。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

请查看示例代码here。你应该提供“\”作为strtok的分隔符字符串。 例如,

ch1 = strtok (ch,"\"");

可能你的问题与表示转义序列有关。请查看here以获取字符转义序列列表。

答案 1 :(得分:0)

根据您的输入:"Hi how" "are you" "thanks",如果您使用带有strtok的{​​{1}}作为分隔符,它会将引用的字符串之间的空格视为字符串,因此如果(例如)你打印出结果字符串,每行一个,用方括号括起来,你得到:

"\""

即,每个引用字符串之间的空白字符本身被视为字符串。如果您提供给[Hi how] [ ] [are you] [ ] [thanks] 的分隔符是strtok(即包括引号和空格),那么不会发生,但然后它也会破坏空格在引用的字符串中。

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