2010-09-28 2 views
-1

Это вопрос (3-3) в ускоренном C++.Напишите программу для подсчета, сколько раз каждое отдельное слово появляется на своем входе

Я новичок в C++. Я думал об этом в течение долгого времени, однако, я не могу понять это. Кто-нибудь разрешит эту проблему для меня? Пожалуйста, объясните это подробно, вы знаете, что я плохо разбираюсь в программировании. Скажите мне значение переменных, которые вы используете.

+6

Было бы полезно, если бы вы могли предоставить свои текущие попытки и/или где вы терпите неудачу. В противном случае вы не просите нас помочь, а скорее выполняйте домашнее задание. Аренда-кодер или тому подобное, вероятно, будет более уместным для этого. –

+0

Да, вы правы. Я вычислил алгоритм, но я не знаю, как его реализовать. Знаешь, я только что узнал четыре главы этой книги. – Darson

+0

Моя идея что-то вроде: – Darson

ответ

6

Наилучшая структура данных для этого - это что-то вроде std::map<std::string,unsigned>, но вы не сталкиваетесь с картами до главы 7.

Вот некоторые подсказки, основанные на содержании главы 3:

  • Вы можете поместить строки в векторе, так что вы можете иметь std::vector<std::string>
  • Строки можно сравнивать, так что std::sort работает с std::vector<std::string>, и вы можете проверить, совпадают ли две строки с s1==s2, как и для целых чисел.
  • Вы видели в главе 1, что std::cin >> s читает слово от std::cin до s, если s является std::string.
+0

СПАСИБО ВАС ОЧЕНЬ. Я думаю, что у меня есть то, что мне нужно. – Darson

+2

'+ 1', чтобы узнать, какие знания могут быть приобретены в разных главах книги. – sbi

0

Ну, вам нужен способ получения отдельных слов из входного потока (возможно, что-то вроде метода «входного потока», применяемого к «стандартным входным потоком») и способ хранения этих строк и счетчиков в некотором роде "коллекция".

Моя естественная домашняя цинизм и общая апатия к жизни мешают мне добавить больше деталей на данный момент :-)

значения любых переменных, которые я использую довольно самоочевидным, так как я предпочитаю использовать такие вещи, как objectsRemaining или hasBeenOpened.

+0

Я не знаю, когда я выбрал домашнюю работу с тегом, на самом деле я изучаю ее сам. Вы очень смешно ~ – Darson

+0

@ Эрик: тег 'homework' был добавлен Paul, предположительно, чтобы люди не отправляли готовые решения. – sbi

+0

Кто такой Пол? Это имя программы? Ты меня испортил. – Darson

0

Это альгортм, который вы можете использовать, попробуйте ввести код и предоставите результаты. Затем люди могут помочь вам добраться дальше.

Сканирование струны, собирающей каждую букву, до тех пор, пока вы не перейдете на границу слова (скажем, пробел или. Или, и т. Д.). Возьмите это слово и сравните его со словами, которые вы уже нашли, если они уже найдены, то добавьте их в число для этого слова. Если это не так, то добавьте это слово в список слов, найденный с отсчетом 1.

Спустившись вниз по строке

+0

3Q. Мой алгоритм такой же, как ваш. Вопрос в том, как сравнить слово, которое вы только что ввели, со словом раньше. Я имею в виду, что тип данных является строкой, есть ли какая-либо функция, например, сравнение строки? – Darson

1

Чтобы обеспечить максимальный опыт обучения, я не буду предоставлять pastable кода. Это упражнение. Вы должны сделать это сами, чтобы учиться как можно больше.

Это идеальный сценарий для использования вида карты, которая создает свой тип значения при доступе к несуществующему ключу. К счастью, C++ имеет такую ​​карту в своей стандартной библиотеке: std::map<key_type,value_type> - это именно то, что вам нужно.

Так вот головоломки штук:

  • вы можете читать слово за словом из потока в строку с помощью оператора >>
  • вы можете магазин что вы найдете в карта слов (строк) вхождения (беззнаковый номер)
  • когда вы доступ к записи на карте через несуществующий ключ, карта поможет создать новое построенное по умолчанию значение под этим ключом для вас; если значение окажется числом, по умолчанию будет установлено значение 0 (ноль)

Удачи, положите это вместе!

+0

Большое спасибо. Я попробую сам. – Darson

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