c++中非常具体的解析

Very specific parsing in C++

本文关键字:非常 c++      更新时间:2023-10-16

基本上,我试图从文件中读取单词,并且没有标点符号,将每个单词读取到multimap中,然后将其插入到矢量中,每对都是一个单词和找到该单词的文件行。我已经得到了删除标点符号的功能,我很确定我的插入代码工作正常,但我似乎无法绕过行号部分。我将这部分代码包含如下:

ifstream in("textfile.txt");
string line;
string keys;
stringstream keystream;
int line_number = 1;
while (getline(in, line, 'n')) {
        alphanum(line);

        keystream << line;

        while(getline(keystream, keys, ' ')) 
            table.insert(keys, line_number); //this just inserts the pair into my  vector (table is an instance of a class I created)
        keystream.str("");

        line_number++;
}

这个问题似乎与stringstream有关。当我用keystream.str("")时,它似乎不清晰。这种特殊的方法似乎只读取第1行,然后退出循环,而我尝试过的其他一些变化(我记不清我到底做了什么)读取整个文件,但不刷新stringstream,所以它读起来像单词1,单词1,单词2,单词1,单词2,单词3等。无论如何,如果有人能给我指出正确的方向,或者链接到一个特定的c++输入解析指南,那将是非常感激的!谢谢!

不要保留string stream对象;每轮新建一个:

string line;
while (getline(in, line, 'n'))
{
    alphanum(line);
    istringstream keystream(line);
    string keys;
    while (getline(keystream, keys, ' '))  // or even "while (keystream >> keys)"
    {
    }
}

我认为问题在于第二个getline()循环在stringstream上设置了EOF标志,当您调用str()时,这不会被清除。

还需要在'keystream'上调用.clear()。