Задача.
Дан текст. Группы символов, разделенные пробелами(одним или несколькими) и не содержащие пробелов внутри себя, будем называть, как и прежде, словами.
Для каждого из слов указать, сколько раз оно встречается среди всех слов, образованных символами данного текста.
Тесты
Input | Output | Комментарий |
123 321 1441 123 456 831 1441 |
123 — 2 1441 -2 321 — 1 456 — 1 831 — 1 |
Пройдено |
iW@910 b10r l4e iW@910 10o b11 a mU611211a9 |
10o — 1 a — 1 b10r — 1 b11 — 1 iW@910 — 2 l4e — 1 mU611211a9 — 1 |
Пройдено |
№!4%» ^&*() +|\/., №!4%» _-=~`;? | +|\/., — 1
^&*() — 1 _-=~`;? — 1 №!4%» — 2 |
Пройдено |
Hey Jude, don’t make it bad. Take a sad song and make it better. |
Hey — 1
Jude, — 1 Take — 1 a — 1 and — 1 bad. — 1 better. — 1 don’t — 1 it — 2 make — 2 sad — 1 song — 1 |
Пройдено |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> #include <cstring> #include <cstdlib> using namespace std; int main() { map<string, int> m; string word; while( cin >> word ) m[word]++; for(map<string, int>::iterator (it) = (m).begin(); (it) != (m).end() ; (it)++) { cout<<it->first<<" - "<<it->second<<endl; } return 0; } |
Ход решения:
Применяя функцию [latex]map[/latex], запишем в индекс массива [latex]m[/latex] слово и увеличим элемент массива данного индекса на единицу. Используя цикл [latex]while[/latex] мы проделаем это для каждого слова введенного с клавиатуры. Если слово повторится , то элемент снова увеличится на единицу. Таким образом получаем количество слов в данном тексте.
С помощью цикла [latex]for[/latex] выводим индекс массива (т.е. слово) и значение (его количество в тексте).
Ссылка на код
Засчитано, 10 баллов!