Не работает сравнение строк между векторным элементом и строкой текстового файла - PullRequest
0 голосов
/ 02 марта 2012
while (file.good())
{
    for (vector <string>::iterator i = v1.begin(); i != v1.end();)
    {
        getline(file, sTmp);
        if (sTmp != *i)
        {
            v2.push_back(sTmp);
        }
        ++i;
    }
}

Я уже заполнил v1 именами файлов в текущем каталоге и просто хочу вставить имена из текстового файла, которые не соответствуют элементам v1 (v1 и v2 - строковые векторы).Приведенный выше код выглядит логичным, но не работает.Я получаю все файлы из txt файла в v2, а не из разных.

Что с ним не так?

1 Ответ

2 голосов
/ 02 марта 2012

Есть несколько проблем с вашим кодом. Тот, который вы видите, должен к тому, что вы читаете новую строку из файла для каждого элемента в v1 и сравните эту строку только с текущим элементом в v1; вы вероятно, хотите переместить getline из внутреннего цикла, что-то как:

std::string line;
while ( std::getline( file, line ) ) {
    std::vector<std::string>::const_iterator pos
            = std::find( v1.begin(), v1.end(), line );
    if ( pos != v1.end() ) {
        v2.push_back( line );
    }
}

Это также решает вторую серьезную проблему: вы не проверяли, что вызов getline завершился успешно перед использованием его результатов. (std::ios_base::good(), вероятно, самая бесполезная функция в стандарт. Я еще не нашел случай, когда звонил бы это соответствующий.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...