Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
6blgJlo'KOgeP
0 / 0 / 2
Регистрация: 13.12.2011
Сообщений: 21
#1

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

28.01.2012, 22:46. Просмотров 3811. Ответов 38
Метки нет (Все метки)

Ребят помогите реализовать следующую програмку: нужно чтоб когда на входе программы было например "мама мыла раму раму мыла мама".


программа вывела: слова которые повторяются и количество их повторения.
http://www.cyberforum.ru/cpp-beginners/thread892422.html

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


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

Удалить из сообщения слова (без учета регистра), которые повторяются.
Удалить из сообщения слова (без учета регистра), которые повторяются.

Получить количество элементов массива, которые не повторяются
Задан массив А(n),некоторые элементы в нем могут встречаться несколько...

Вывести буквы текста которые меньше всего повторяются
надо вывести буквы из текста которые меньше всего повторяются на с++

Найти и вывести на экран слова, которие повторяются
Доброго времени суток, форумчани. Помогите пожалуста решить задачу на Си...

Вывести элементы массива, которые повторяются ровно два раза
Массив создать динамический. Язык - С++ Пример: Пусть даны числа:...

38
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 17:59 #21
Цитата Сообщение от easybudda Посмотреть сообщение
кроме while ( 1 ) ничего не правил. Запустил программу, в ответ на приглашение ввёл строку, выдало результат и снова приглашение. Просто нажал enter, выдало предыдущий результат и приглашение...
- ну это я не от руки писал

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ниже отработка для 2-го ввода
2 теста
, как вариант поставь, что нибудь другое кроме MinGW...
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
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)
Что я не так делаю?
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 20:58 #23
[OFF]
Цитата Сообщение от easybudda Посмотреть сообщение
Что я не так делаю?
- хм занятно, думаю неверно работает компилятор, может оно и верно только в студии отрабатывает
(м.б. я скрин нарисовал???)

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

Не по теме:

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

0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
04.02.2012, 01:01 #28
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
я опять удивлён - хорошо в начале цикла здесь пиши text[0] = '\0'; и будет счастье от лицезрения пустого ввода(можно ещё if ввести, чтобы сообщение выводил при пустом вводе - к алгоритму выделения слов это ну никакого отношения не имеет...)
Ну подумаешь, память лишняя обнуляется, ну ничего, что на ввод пустой строки программа старые данные выдаёт. Сам алгоритм тоже прекрасен, да и реализован отлично
Код
Enter text(less than 1024 chars)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Segmentation fault
ну так и это поправляется...
А пишу я это всё к тому, что велосипеды всегда (ну или за очень редким исключением) на несколько порядков кривее стандартных функций. И очень важно научиться пользоваться ими, а не городить не бог весть что, чтобы потом не удивляться
Другое дело - попытки написать собственную реализацию стандартных функций, что в общем дело полезное. Пока пишешь, становится понятнее, почему они в стандартной библиотеке текие, какие есть. Но в любом случае очень важно проверять результаты своих стараний, иначе толка от них мало будет...
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.03.2012, 10:38 #29
Цитата Сообщение от go Посмотреть сообщение
строку гробит
Кто не дает Вам право сделать копию?
- go, посмотри с какими проблемами сталкиваются люди и почему strtok иногда не применим...
http://www.cyberforum.ru/visual-cpp/...ml#post2828808
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 11:20 #30
-=ЮрА=-, насколько я понял, там С++. Дальше не смотрел.
0
-=ЮрА=-
24.03.2012, 12:06
  #31

Не по теме:

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

0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 12:09 #32
-=ЮрА=-, strtok стандартная функция. Любители неуклюжих велосипедов, возможно откажутся от нее. Как и от всей string.h.
0
silent_1991
Эксперт С++
5007 / 3065 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
24.03.2012, 14:57 #33
go, strtok действительно не рекомендуется использовать, и именно по причине того, что она портит исходную строку.
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 15:10 #34
Цитата Сообщение от silent_1991 Посмотреть сообщение
go, strtok действительно не рекомендуется использовать, и именно по причине того, что она портит исходную строку.
Сергей, можно работать и с копией строки. Во всяком случае никто не говорил, что будет просто.
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
24.03.2012, 15:26 #35
Цитата Сообщение от silent_1991 Посмотреть сообщение
go, strtok действительно не рекомендуется использовать, и именно по причине того, что она портит исходную строку.
Спорить не буду, может кто-то где-то и не рекомендует её использовать, но я бы не заметил такую нерекомендацию. Если так важно сохранять изначальную строку, лучше сделать обёртку, внутри которой в strtok будет передаваться копия строки, нежели мудрить непонятные алгоритмы с незатейливой реализацией.
0
-=ЮрА=-
Заблокирован
Автор 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 а то ещё и к этому придерёшся)
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
24.03.2012, 17:38 #37
-=ЮрА=-, много раз уже говорил и ещё раз повторю - велосипеды делать иногда приходится, но нужна достаточно веская причина, чтобы просто задуматься об отказе от стандартных средств, не то, чтобы на самом деле от них отказаться. Текстовая строка длинной в 2+ гигабайта, полностью отображённая в память - сама по себе повод задуматься. В случае строк вменяемой длины (умещающихся в установленный в системе размер буфера) мне бы и в голову не пришло морочиться изобретением велосипедов (будь то учебная програмка в десяток строк или рабочая программа общей длинной в 10К строк). К тому же реализация более, чем сомнительна (28 пост в этой теме). Короче, думаю, не нужно искать проблему там, где её нет. Если на то пошло - можно насочинять уйму задач, для которых мощности персонального компьютера в принципе не хватит. Но это не повод продавать квартиру и переезжать в комнату в коммуналке, став при этом счастливым обладателем небольшого шкафчика напиханного примерно такими железяками и способного за считанные минуты раскодировать инопланетные послания длиной в петабайт символов каждое...
1
-=ЮрА=-
24.03.2012, 18:37
  #38

Не по теме:

easybudda,

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

0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.03.2012, 18:49 #39
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- для ряда задач strtok самое оно, но для других strtok может сыграть плохую шутку и топик я обновил не для того чтобы поругаться, а с совершенно с иной целью, вот.
Всем необходимо уметь пользоваться.
0
24.03.2012, 18:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 18:49
Привет! Вот еще темы с решениями:

Пользователь вводит 8 чисел, вывести числа которые повторяются 2 или больше раз
Я понимаю, в средние века за такой код сжигали на костре. Но я только учусь....

Определить количество слов в тексте, и вывести слова, которые по длине меньше заданного числа
Помогите написать прогу... Не работает..;) /*Дан текст, в котором слова...

Убедиться, что последние числа ряда повторяются, и найти период повторения
Задан ряд аn=an-2+an-1, a0=0, a1=1. Убедитесь, что последние числа этого ряда...

В строке слов из букв латинского алфавита найти слова, в которых нет букв, которые повторяются.
В строке слов из букв латинского алфавита найти слова, в которых нет букв,...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru