2017-02-10 2 views
2

у меня есть задание для класса, чтобы написать код, который будет подсчитывать количество появлений конкретного слова в .txt файл случае нечувствительнойCount число появлений конкретного слова в C++ текстового файла

int main(){ 
    char U[50]; 
    string a; 
    int number=0; 
    cout<<"name of file"<<endl; 
    cin.getline(U,50); 
    ifstream text(U,ios_base::binary); 
    if(!text){ 
     cout<<"nonexisting"<<endl; 
     return 0; 
    } 
    cin>>a; 
    transform(a.begin(), a.end(), a.begin(), ::tolower); 
    string word; 
    while(text>>word){ 
     transform(word.begin(), word.end(), word.begin(), ::tolower); 
     if(!a.compare(word))number++;  
    } 
    cout<<number; 
    text.close(); 
    return 0; 
} 

проблема заключается программа состоит из 32 слов в файле, но есть 40 из них

вот мое решение проблемы

int main(){ 
char U[50]; 
string a; 
int number=0; 
cout<<"name of file"<<endl; 

cin.getline(U,50); 
ifstream text(U); 
if(!text){ 
cout<<"nonexisting"<<endl; 
return 0; 
} 

cin>>a; 

transform(a.begin(), a.end(), a.begin(), ::tolower); 
string word; 
while(text>>word){ 
    transform(word.begin(), word.end(), word.begin(), ::tolower); 
    if (word.find(a) != string::npos)number++; 

} 
cout<<number; 
text.close(); 
+0

Для начала, если вы хотите что-то посчитать, вероятно, вы должны использовать ['std :: count' или' std :: count_if'] (http://en.cppreference.com/w/cpp/algorithm/ рассчитывать). Чтобы продолжить, я предлагаю прочитать все слова в ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) (что может быть сделано за один проход, без цикла для тебя). Можете не решить вашу проблему, но сделает код более простым. –

+1

Что касается вашей проблемы, почему вы открываете * текстовый файл * в * двоичном режиме *? Это может быть возможной проблемой. –

+0

Возможный дубликат [C++, подсчет повторяющихся слов в строке и отображении] (http://stackoverflow.com/questions/11833882/c-count-repeated-words-in-the-string-and-display) – Priya

ответ

0

Я предполагаю, что в 8 словах, которые не учитываются, есть символ новой строки в конце, то есть они появляются в конце строк в файле. Можете ли вы проверить, так ли это? Согласно http://www.cplusplus.com/reference/string/string/operator%3E%3E/, оператор >> анализирует пробелы в качестве разделителей.

+0

yep that is the problem Я только что писал и редактировал – awashima

+0

Newline - символ пробела. –

+0

@ н.м. На связанной странице выше: «Обратите внимание, что операции извлечения istream используют пробелы в качестве разделителей». Это заставляет меня думать, что в этом случае используются только буквальные пробелы. Во всяком случае, очевидно, это верно, потому что OP получает ожидаемый счет после фиксации для этого. – GigaRohan

Смежные вопросы