Судя по названию, я вроде сделал свою программу довольно сложным способом. НО! С таким же успехом я мог бы спросить xD
Это простая программа, которую я сделал в ответ на вопрос 3-3 «Ускоренный 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 Как только я смогу, я буду! И еще раз спасибо!