Очень специфический синтаксический анализ в C ++ - PullRequest
2 голосов
/ 29 ноября 2011

По сути, я пытаюсь прочитать слова из файла и без знаков препинания прочитать каждое слово в мультикарту, которая затем вставляется в вектор, где каждая пара представляет собой слово, а строка файла - это слово.найденный.У меня есть функция удаления пунктуации, которая работает отлично, и я вполне уверен, что мой код вставки работает правильно, но я не могу обойти часть номера строки.Я включил этот раздел своего кода следующим образом:

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 ++, которое будет оченьоценили!Спасибо!

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Мне кажется, проблема в том, что второй цикл getline () устанавливает флаг EOF в потоке строки, и это не очищается при вызове str (). Вам также необходимо вызывать .clear () для keystream.

1 голос
/ 29 ноября 2011

Не хранить объект потока строк; просто сделайте новый в каждом раунде:

string line;
while (getline(in, line, '\n'))
{
    alphanum(line);
    istringstream keystream(line);

    string keys;
    while (getline(keystream, keys, ' '))  // or even "while (keystream >> keys)"
    {

    }
}
...