Форум программистов, компьютерный форум CyberForum.ru

Вывести слова которые повторяются и количество их повторения - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
6blgJlo'KOgeP
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 21
28.01.2012, 22:46     Вывести слова которые повторяются и количество их повторения #1
Ребят помогите реализовать следующую програмку: нужно чтоб когда на входе программы было например "мама мыла раму раму мыла мама".


программа вывела: слова которые повторяются и количество их повторения.

мама - 2раза
раму - 2раза
мыла - 2 раза


помогите
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2012, 22:46     Вывести слова которые повторяются и количество их повторения
Посмотрите здесь:

C++ Вывести все слова текста, которые отличны от последнего слова, предварительно преобразовав их
Найти и вывести на экран слова, которие повторяются C++
Удалить из сообщения слова (без учета регистра), которые повторяются. C++
C++ Вывести слова данного предложения, которые отличны от последнего слова
В строке слов из букв латинского алфавита найти слова, в которых нет букв, которые повторяются. C++
Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв C++
C++ Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 17:59     Вывести слова которые повторяются и количество их повторения #21
Цитата Сообщение от easybudda Посмотреть сообщение
кроме while ( 1 ) ничего не правил. Запустил программу, в ответ на приглашение ввёл строку, выдало результат и снова приглашение. Просто нажал enter, выдало предыдущий результат и приглашение...
- ну это я не от руки писал

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ниже отработка для 2-го ввода
2 теста
, как вариант поставь, что нибудь другое кроме MinGW...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
03.02.2012, 18:18     Вывести слова которые повторяются и количество их повторения #22
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
как вариант поставь, что нибудь другое кроме MinGW...
Код
C:\c_cpp\shitcode>cl yura_get_words.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

yura_get_words.c
yura_get_words.c(27) : error C2143: syntax error : missing ';' before 'type'
yura_get_words.c(28) : error C2065: 'i' : undeclared identifier
После исправления (26 и 27 строчки местами поменял):
Код
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:yura_get_words.exe
yura_get_words.obj

C:\c_cpp\shitcode>yura_get_words.exe
Enter text(less than 1024 chars)
bla one bla two bla three two one
Number of words in string 8
bla chislo raz v stroke 3
one chislo raz v stroke 2
two chislo raz v stroke 2
three chislo raz v stroke 1
Enter text(less than 1024 chars)

Number of words in string 8
bla chislo raz v stroke 3
one chislo raz v stroke 2
two chislo raz v stroke 2
three chislo raz v stroke 1
Enter text(less than 1024 chars)
Что я не так делаю?
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 20:58     Вывести слова которые повторяются и количество их повторения #23
[OFF]
Цитата Сообщение от easybudda Посмотреть сообщение
Что я не так делаю?
- хм занятно, думаю неверно работает компилятор, может оно и верно только в студии отрабатывает
(м.б. я скрин нарисовал???)

PS:Могу сбросить проект в VS2008
Миниатюры
Вывести слова которые повторяются и количество их повторения  
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
03.02.2012, 22:45     Вывести слова которые повторяются и количество их повторения #24
-=ЮрА=-, попробуй всё то же самое, только вместо ввода строки "this is second text" просто ввод нажми.
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 22:50     Вывести слова которые повторяются и количество их повторения #25
Цитата Сообщение от easybudda Посмотреть сообщение
только вместо ввода строки "this is second text" просто ввод нажми.
text остаётся в буфере(строка ведь не разрушается как при отработке strtok), а что по твоему должно было происходить???
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
03.02.2012, 23:42     Вывести слова которые повторяются и количество их повторения #26
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
text остаётся в буфере(строка ведь не разрушается как при отработке strtok), а что по твоему должно было происходить???
Ну например должно выводиться сообщение, что слов не найдено, или, как я обычно делаю, пустая строка - выход... Но уж точно не предыдущий вывод повторять. Странная какая-то особенность реализации.
-=ЮрА=-
04.02.2012, 00:06
  #27

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
Ну например должно выводиться сообщение, что слов не найдено, или, как я обычно делаю, пустая строка - выход...
-
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(true)//Можно будет вводить текст хоть до бесконечности
* * * * {
//Вот тут добавь text[0] = '\0';
* * * * * * * * WordArray = NULL;
easybudda, я опять удивлён - хорошо в начале цикла здесь пиши text[0] = '\0'; и будет счастье от лицезрения пустого ввода(можно ещё if ввести, чтобы сообщение выводил при пустом вводе - к алгоритму выделения слов это ну никакого отношения не имеет...)
Думаю наша дискусия в рамках данного топика интересна лишь нам двоим, верней мне уже не интересна. Я хотел привести алгоритм отличный от всех приведенных, я привёл большего мне ничего не надо...

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
04.02.2012, 01:01     Вывести слова которые повторяются и количество их повторения #28
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
я опять удивлён - хорошо в начале цикла здесь пиши text[0] = '\0'; и будет счастье от лицезрения пустого ввода(можно ещё if ввести, чтобы сообщение выводил при пустом вводе - к алгоритму выделения слов это ну никакого отношения не имеет...)
Ну подумаешь, память лишняя обнуляется, ну ничего, что на ввод пустой строки программа старые данные выдаёт. Сам алгоритм тоже прекрасен, да и реализован отлично
Код
Enter text(less than 1024 chars)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Segmentation fault
ну так и это поправляется...
А пишу я это всё к тому, что велосипеды всегда (ну или за очень редким исключением) на несколько порядков кривее стандартных функций. И очень важно научиться пользоваться ими, а не городить не бог весть что, чтобы потом не удивляться
Другое дело - попытки написать собственную реализацию стандартных функций, что в общем дело полезное. Пока пишешь, становится понятнее, почему они в стандартной библиотеке текие, какие есть. Но в любом случае очень важно проверять результаты своих стараний, иначе толка от них мало будет...
-=ЮрА=-
Заблокирован
Автор FAQ
24.03.2012, 10:38     Вывести слова которые повторяются и количество их повторения #29
Цитата Сообщение от go Посмотреть сообщение
строку гробит
Кто не дает Вам право сделать копию?
- go, посмотри с какими проблемами сталкиваются люди и почему strtok иногда не применим...
Тип дескриптора на проекцию файла.
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.03.2012, 11:20     Вывести слова которые повторяются и количество их повторения #30
-=ЮрА=-, насколько я понял, там С++. Дальше не смотрел.
-=ЮрА=-
24.03.2012, 12:06
  #31

Не по теме:

Цитата Сообщение от go Посмотреть сообщение
насколько я понял, там С++
- там дело не в том что на Си или плюсах(там кстати API код), а в том что strtok коробит данные отображаемые в память...

go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.03.2012, 12:09     Вывести слова которые повторяются и количество их повторения #32
-=ЮрА=-, strtok стандартная функция. Любители неуклюжих велосипедов, возможно откажутся от нее. Как и от всей string.h.
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.03.2012, 14:57     Вывести слова которые повторяются и количество их повторения #33
go, strtok действительно не рекомендуется использовать, и именно по причине того, что она портит исходную строку.
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.03.2012, 15:10     Вывести слова которые повторяются и количество их повторения #34
Цитата Сообщение от silent_1991 Посмотреть сообщение
go, strtok действительно не рекомендуется использовать, и именно по причине того, что она портит исходную строку.
Сергей, можно работать и с копией строки. Во всяком случае никто не говорил, что будет просто.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
24.03.2012, 15:26     Вывести слова которые повторяются и количество их повторения #35
Цитата Сообщение от silent_1991 Посмотреть сообщение
go, strtok действительно не рекомендуется использовать, и именно по причине того, что она портит исходную строку.
Спорить не буду, может кто-то где-то и не рекомендует её использовать, но я бы не заметил такую нерекомендацию. Если так важно сохранять изначальную строку, лучше сделать обёртку, внутри которой в strtok будет передаваться копия строки, нежели мудрить непонятные алгоритмы с незатейливой реализацией.
-=ЮрА=-
Заблокирован
Автор FAQ
24.03.2012, 16:01     Вывести слова которые повторяются и количество их повторения #36
easybudda, давай тогда завершим нашу дискусию по поводу strtok - сфера применения strtok простенькие програмки не требующие особых навыков работы. В общем случае строка может быть слишком большой чтобы делать для неё 2-й буфер. Да можно реализовать достаточно простой алгоритм для c strtok и 2-м буфером(увеличив ресурсозатратность нашей програмки ровно в 2 раза), либо всё же сесть и раз и на всегда написать аналог strtok и не мудрить с памятью.
Суть strtok в следующем - она забивает строку нулями кроме отличных от разделителй символов, а потом последовательно выдаёт нам то что между ноликами в виде очередной дозы токенов.
Логика scanf в выборке токенов подходящего формата - оба алгоритма заслуживают на жизнь и гнуть палку в сторону strtok не следует. Лично да часто использую strtok - да она проста и давать ответы с ней на форуме легко, но иногда можно встретиться с ограничениями когда и ввести 2-й то буфер нельзя. Что если у тебя есть дескриптор отображённого в память файла, что если туда отображено 100 Мб и в этих 100 Мб нужно выловить какой либо строковый-ключ, причём критически важно чтобы оперативку больше уже ничего не писали. Задачи разные бывают для одних strtok - то самое оно, а для других Г на постном масле. Своим алгоритмом по принципу scanf свободно мог бы почитывать отражённый файл извлекая из него нужное (читал бы посредством ReadFile а то ещё и к этому придерёшся)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
24.03.2012, 17:38     Вывести слова которые повторяются и количество их повторения #37
-=ЮрА=-, много раз уже говорил и ещё раз повторю - велосипеды делать иногда приходится, но нужна достаточно веская причина, чтобы просто задуматься об отказе от стандартных средств, не то, чтобы на самом деле от них отказаться. Текстовая строка длинной в 2+ гигабайта, полностью отображённая в память - сама по себе повод задуматься. В случае строк вменяемой длины (умещающихся в установленный в системе размер буфера) мне бы и в голову не пришло морочиться изобретением велосипедов (будь то учебная програмка в десяток строк или рабочая программа общей длинной в 10К строк). К тому же реализация более, чем сомнительна (28 пост в этой теме). Короче, думаю, не нужно искать проблему там, где её нет. Если на то пошло - можно насочинять уйму задач, для которых мощности персонального компьютера в принципе не хватит. Но это не повод продавать квартиру и переезжать в комнату в коммуналке, став при этом счастливым обладателем небольшого шкафчика напиханного примерно такими железяками и способного за считанные минуты раскодировать инопланетные послания длиной в петабайт символов каждое...
-=ЮрА=-
24.03.2012, 18:37
  #38

Не по теме:

easybudda,

Цитата Сообщение от easybudda Посмотреть сообщение
В случае строк вменяемой длинны (умещающихся в установленный в системе размер буфера)
- для ряда задач strtok самое оно, но для других strtok может сыграть плохую шутку и топик я обновил не для того чтобы поругаться, а с совершенно с иной целью, вот.
Цитата Сообщение от easybudda Посмотреть сообщение
такими железяками и способного за считанные минуты раскодировать инопланетные послания длинной в петабайт символов каждое...
- оценил плюсую

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 18:49     Вывести слова которые повторяются и количество их повторения
Еще ссылки по теме:

Вывести элементы массива, которые повторяются ровно два раза C++
C++ Пользователь вводит 8 чисел, вывести числа которые повторяются 2 или больше раз
Определить количество слов в тексте, и вывести слова, которые по длине меньше заданного числа C++
C++ Запись в файл слов, которые не повторяются
C++ Убедиться, что последние числа ряда повторяются, и найти период повторения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.03.2012, 18:49     Вывести слова которые повторяются и количество их повторения #39
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- для ряда задач strtok самое оно, но для других strtok может сыграть плохую шутку и топик я обновил не для того чтобы поругаться, а с совершенно с иной целью, вот.
Всем необходимо уметь пользоваться.
Yandex
Объявления
24.03.2012, 18:49     Вывести слова которые повторяются и количество их повторения
Ответ Создать тему
Опции темы

Текущее время: 03:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru