Судя по названию, я сделал свою программу довольно сложным способом. НО! Я бы все равно спросил xD
Это простая программа, которую я написал в ответ на вопрос 3-3 книги Accelerated C++, которая, на мой взгляд, является отличной книгой.
Я создал вектор:
vector<string> countEm;
Это принимает все допустимые строки. Поэтому у меня есть вектор, содержащий элементы строк.
Далее я создал функцию
int toLowerWords( vector<string> &vec )
{
for( int loop = 0; loop < vec.size(); loop++ )
transform( vec[loop].begin(), vec[loop].end(),
vec[loop].begin(), ::tolower );
который разбивает ввод на все символы нижнего регистра для облегчения подсчета. Все идет нормально.
Я создал третью и последнюю функцию для фактического подсчета слов, и здесь я застрял.
int counter( vector<string> &vec )
{
for( int loop = 0; loop < vec.size(); loop++ )
for( int secLoop = 0; secLoop < vec[loop].size(); secLoop++ )
{
if( vec[loop][secLoop] == ' ' )
Это просто смешно выглядит. Использование двумерного массива для вызова символов вектора, пока я не найду пробел. Нелепый. Я не верю, что это элегантное или даже жизнеспособное решение. Если бы это было жизнеспособным решением, я бы отступил от пробела и скопировал все символы, которые я нашел, в отдельный вектор и подсчитал этих.
Тогда мой вопрос. Как я могу разбить вектор строк на отдельные слова, чтобы я мог их посчитать? Я думал об использовании strchr, но это не дало мне никаких прозрений.
Решение через Нила:
stringstream ss( input );
while( ss >> buffer )
countEm.push_back( buffer );
Из этого я мог легко сосчитать (повторяющиеся) слова.
Затем я сделал решение через Вильгельма, которое я опубликую, как только перепишу его, так как я случайно удалил это решение! Глупо с моей стороны, но я опубликую это, как только снова напишу ^^
Я хочу поблагодарить всех вас за ваш вклад! Решения сработали, и я стал немного лучше программировать. Если бы я мог проголосовать за ваши вещи, я бы сделал это :P Как только я смогу, я это сделаю! И еще раз спасибо!