Как прочитать файл и сохранить дефис, используя STL C ++ - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно прочитать текстовый файл, преобразовать его в нижний регистр и удалить не алфавитные символы, но также необходимо сохранить дефис и не считать его словом. вот моя кодировка Он считает дефис как слово в UnknownWords. Я просто хочу сохранить дефис и просто хочу подсчитать слова, которые находятся слева и справа от дефиса в .txt.

Мой вывод:

110 Known words read
79 Unknown words read //it is because it is counting hyphen as word

Желаемый вывод:

110 Known words read
78 Unknown words read   

Код:

void WordStats::ReadTxtFile(){
    std::ifstream ifile(Filename);
    if(!ifile)
    {
        std::cerr << "Error Opening file " << Filename << std::endl;
        exit(1);
    }
    for (std::string word; ifile >> word; )
    {

        transform (word.begin(), word.end(), word.begin(), ::tolower);
        word.erase(std::remove_if(word.begin(), word.end(), [](char c)
        {
            return (c < 'a' || c > 'z') && c != '\'' && c != '-';
        }),  word.end());
        if (Dictionary.count(word))
        {
            KnownWords[word].push_back(ifile.tellg());
        }
        else
        {
            UnknownWords[word].push_back(ifile.tellg()); 
        }
    }
    //  std::string word; ifile >> word;


    std::cout << KnownWords.size() << " known words read." << std::endl;
    std::cout << UnknownWords.size() << " unknown words read." << std::endl;
}

1 Ответ

0 голосов
/ 10 мая 2018

Если вы не хотите помещать слово, которое само по себе является "-", проверьте это перед добавлением к словам векторов:

for (std::string word; ifile >> word; )
{

    transform (word.begin(), word.end(), word.begin(), ::tolower);
    word.erase(std::remove_if(word.begin(), word.end(), [](char c)
    {
        return (c < 'a' || c > 'z') && c != '\'' && c != '-';
    }),  word.end());
    if (word.find_first_not_of("-") == string::npos) { // Ignore word that's only hyphens
        continue;
    }
    if (Dictionary.count(word))
    {
        KnownWords[word].push_back(ifile.tellg());
    }
    else
    {
        UnknownWords[word].push_back(ifile.tellg()); 
    }
}
...