2013-04-26 1 views
0

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

int main() 
{ 
    ifstream input1; 
    input1.open("Base_text.txt"); 

    vector<string> base_file; 
    vector<int> base_count; 


    if (input1.fail()) 
    { 
     cout<<"Input file 1 opening failed."<<endl; 
     exit(1); 
    } 

    make_dictionary(input1, base_file, base_count); 


} 

void make_dictionary(istream& file, vector<string>& words, vector<int>& count) 
{ 


    string word; 
    int i=0; 

    while (file>>word) 
    { 
     words.push_back(word); 
     cout<<words[i]; 
     i++; 
    } 


    for (i=0; i<words.size(); i++) 
    { 
     if ((words[i+1]!=words[i])) 
      { 
       count.push_back(i); 

      } 
    } 

Вопрос 1: Как получить вектор, который будет содержать пробелы и распознать отдельные слова? Вопрос 2: Любые идеи о том, как действовать со второй частью (для цикла)?

+0

Вы можете использовать boost? –

+0

Возможный дубликат [Подсчитать количество раз, когда каждое слово встречается в файле] (http://stackoverflow.com/questions/6103927/count-the-number-of-times-each-word-occurs-in-a- файл) –

ответ

5

Это довольно неэффективно. Вы должны использовать

std::map<string, int> 

вместо этого. Это проще и эффективнее.

Петля над файлом. Когда вы увидите слово, посмотрите, находится ли оно на карте. Если это не так, добавьте новое слово со счетом 1. Если это так, увеличьте количество.

+0

Это даже не должно быть сложной 'std :: map dict; ... ++ dict [word]; 'все, что вам нужно. – john

+0

Не уверен, что значение int будет инициализировано равным 0, если оператор [] добавляет новый элемент. –

+0

Это будет, гарантировано, не просите меня процитировать стандарт. – john

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

  • Нет связанных вопросов^_^