Я работаю на упражнение с Accelerated C++:сосчитать, сколько раз появляется каждый отдельный слово на входе
Написать программу для подсчета, сколько раз появляется каждый отдельный слово в его входе.
Вот мой код:
#include <iostream>
#include <string>
#include <vector>
int main()
{
// Ask for
// and read the input words
std::cout << "Please input your words: " << std::endl;
std::vector<std::string> word_input;
std::string word;
int count = 0;
while (std::cin >> word)
{
word_input.push_back(word);
++count;
}
// Compare the input words
// and output the times of every word compared only with all the words
/***** I think this loop is causing the problem ******/
for (int i = 0; i != count; ++i)
{
int time = 0;
for (int j = 0; j != count; ++j)
{
if (word_input[i] == word_input[j])
++time;
else
break;
}
std::cout << "The time of "
<< word_input[i]
<< " is: "
<< time
<< std::endl;
}
return 0;
}
Если скомпилировать и запустить эту программу, вы увидите:
Please input your words:
И вход следующим образом:
good good is good EOF
Тогда он показывает:
The time of good is: 2 The time of good is: 2 The time of is is: 0 The time of good is: 2
Мой ожидаемый результат:
The time of good is: 3 The time of is is: 1
Я не хочу, чтобы использовать карту, потому что я не узнал, что до сих пор.
В чем причина этого неожиданного поведения и как его исправить?
std :: map не реализован как хэш-таблица, поэтому он все равно будет медленным. См. Stdext :: hash_map или новый std :: tr1 :: unordered_map. –
Я не хочу использовать карту, потому что я не узнал, что ~ Я только что узнал 3 главы. И я только что редактировал мой вопрос. Может быть, вы не поняли, чего я хочу.Спасибо вам все равно ~ – Darson
@ Mark Ingram: Или, альтернативно, 'boost :: unordered_map' для старых компиляторов. – lunaryorn