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

С++ для начинающих

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

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

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

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


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

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


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

Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз - C++
#include "stdafx.h" #include <iostream> #include <fstream> using namespace std; int _tmain() { ifstream f ("d:\\base1.txt"); ...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
03.02.2012, 16:14 #16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
easybudda, зачем strtok - он же небезопасный
В плане потоков? strtok_r() есть на такие случаи.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и строку гробит
Да и чёрт бы с ней. Если нужна исходная строка, go прекрасный выход подсказал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
почему за столько лет от него не откажешся?
Когда я только появился на форуме, я просто не умел этой функцией пользоваться. Тоже знатные велосипеды сочинял по извлечению слов из строк (можно поискать при желании). Разобравшись же с ней просто не вижу смысла городить вот такие непонятные конструкции, да ещё и череватые ошибками вроде обнуления произвольного количества байт памяти...
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
это всё легко устранимо
Да само собой, только его ещё заметить надо... Короче, по моему скромному, нужен очень веский повод, чтобы отказываться от стандартных библиотечных функций, гораздо лучше научиться ими пользоваться.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(true)
Если на С, то
C
1
while ( 1 )
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Благодарю за альфа-тестирование
А попробуй в ответ на второй запрос просто enter нажать...
Да и само по себе решение с деревом как-то оптимистичнее выглядит, к тому же у меня в примере слова лишний раз вообще никуда не копируются...
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 16:29 #17
Цитата Сообщение от easybudda Посмотреть сообщение
к тому же у меня в примере слова лишний раз вообще никуда не копируются
- ну это не аргумент переделать под такое довольно таки просто
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
можно доработать механизм и не записывать в WordArray дублежи
Цитата Сообщение от easybudda Посмотреть сообщение
А попробуй в ответ на второй запрос просто enter нажать...
- всмысле, 2-й ввод, или что имелось ввиду?
Ниже отработка для 2-го ввода
2 теста
Enter text(less than 1024 chars)
test test test
Number of words in string 3
test chislo raz v stroke 3
Enter text(less than 1024 chars)
test2 test2 test2
Number of words in string 3
test2 chislo raz v stroke 3
Enter text(less than 1024 chars)


Добавлено через 4 минуты
easybudda, записанные слова из текста можно к примеру использовать для их реверса(вывод слов в предложении наоброт), да миллион таких заданий можно придумать, лично мне нра, навязывать алгоритм я и не хотел просто показал как можно обойтись без strtok -
имхо
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(i < sLen)
* * * * {
* * * * * * * * sscanf(text + i,"%s",word);
* * * * * * * * str = strstr(text + i, word);
* * * * * * * * wLen= strlen(word);
* * * * * * * * i * = strlen(text) - strlen(str) + wLen;
* * * * }
не на много сложней чем
while(tok)
{
tok = strtok(NULL,delim);
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
03.02.2012, 16:34 #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну это не аргумент переделать под такое довольно таки просто
можно доработать механизм и не записывать в WordArray дублежи
Так у меня и первые из повторяющихся слов, и вообще никакие слова никуда не копируются, как лежали в исходной строке, так и лежат. Как-раз аргумент.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
просто показал как можно обойти strtok
Осталось объяснить, за чем...

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
всмысле, 2-й ввод, или что имелось ввиду?
Код
Enter text(less than 1024 chars)
bla one two bla two bla three three three
Number of words in string 9
bla chislo raz v stroke 3
one chislo raz v stroke 1
two chislo raz v stroke 2
three chislo raz v stroke 3
Enter text(less than 1024 chars)

Number of words in string 9
bla chislo raz v stroke 3
one chislo raz v stroke 1
two chislo raz v stroke 2
three chislo raz v stroke 3
Enter text(less than 1024 chars)

Number of words in string 9
bla chislo raz v stroke 3
one chislo raz v stroke 1
two chislo raz v stroke 2
three chislo raz v stroke 3
Enter text(less than 1024 chars)

Не по теме:

Как в том анекдоте

Малыш, хочешь, я расскажу тебе сказку... Малыш, хочешь, я расскажу тебе сказку... Малыш, хочешь, я расскажу тебе сказку...

0
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 17:14 #19
easybudda, ничего не понял возможно правя мой код забыл getchar
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
printf("Enter text(less than 1024 chars)\n");
* * * * * * * * scanf("%[^\n]",text);
* * * * * * * * getchar();//Убрали '\n' от ввода

Не по теме:

PS:Тоже приведу одну цитату: Павлины говришь, эээ эх...

0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
03.02.2012, 17:37 #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ничего не понял возможно правя мой код забыл getchar
кроме while ( 1 ) ничего не правил. Запустил программу, в ответ на приглашение ввёл строку, выдало результат и снова приглашение. Просто нажал enter, выдало предыдущий результат и приглашение...
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 17:59 #21
Цитата Сообщение от easybudda Посмотреть сообщение
кроме while ( 1 ) ничего не правил. Запустил программу, в ответ на приглашение ввёл строку, выдало результат и снова приглашение. Просто нажал enter, выдало предыдущий результат и приглашение...
- ну это я не от руки писал

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ниже отработка для 2-го ввода
2 теста
, как вариант поставь, что нибудь другое кроме MinGW...
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
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Эксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
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Эксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
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Эксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
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 иногда не применим...
Тип дескриптора на проекцию файла.
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.03.2012, 11:20 #30
-=ЮрА=-, насколько я понял, там С++. Дальше не смотрел.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 11:20
Привет! Вот еще темы с ответами:

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

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

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

Вывести слова данного предложения, которые отличны от последнего слова - C++
Разработать алгоритм и составить программу на языке Си. Предполагается, что длина вводимого текста ограничена константой. Длины слов...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.03.2012, 11:20
Ответ Создать тему
Опции темы

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