0

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

我有这个文本文件

q1 t q2

q2 e q3

q3 x q4

q4 t q5 q6 q11

q5 | q6 q11 

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

我在想有两种方法可以解决这个问题

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

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

4

2 回答 2

3

使用getline, 和 对结果字符串进行标记,将其放入 astd::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
    }
}
于 2012-10-15T09:30:14.447 回答
0

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

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

于 2012-10-15T09:32:20.010 回答