试图标记字符串

Trying to tokenize a string

本文关键字:字符串 图标      更新时间:2023-10-16

可能的重复:
如何在C++中标记字符串?

我有这个文本文件

q1 t q2
q2 e q3
q3 x q4
q4 t q5 q6 q11
q5 | q6 q11 

我想提取每个由空格分隔的元素。例如,在第一行中,我希望能够提取"q1"、"t"answers"q2"作为单独的标记。

我认为这个有两种方法

  1. 使用ifstream>>逐个标记地从文件中读取。我用这种方法遇到的问题是,我不知道如何判断何时到达了一行的末尾,以便我可以转到下一行。

  2. 另一种方法是使用getline()同时获取整行;这种方法的问题是,我必须自己标记字符串,每一行都不同,所以我不确定这是最好的主意。我很震惊,除了strtok()之外,没有任何内置的方法可以做到这一点,它看起来根本不是我想要的。谢谢大家,任何帮助都将不胜感激。

使用getline,要将生成的字符串标记化,请将其放入std::stringstream并从中提取标记。

std::string line_string;
while ( getline( file, line_string ) ) {
std::istringstream line( line_string );
std::string token;
while ( line >> token ) {
do something with token
}
}

如果只想使用标准库,可以使用getline,然后逐字使用stringstreamifstream>>

否则,C++在文本处理方面确实非常有限,你可以更容易地使用Qt的字符串和流,或者boost的字符串算法(包括split),它们与STL字符串很好地集成。