Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/58: Рейтинг темы: голосов - 58, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
1

Найти самое длинное и самое короткое слово в предложении

24.02.2010, 23:47. Показов 11013. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить и отладить программу, которая выполняет следующие действия. В заданном тексте из нескольких предложений найти самое длинное и самое короткое слово. Если они принадлежат одному и тому же предложению, заменить их в тексте звездочками.


помогите....хоть объясните как делать(((
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2010, 23:47
Ответы с готовыми решениями:

В заданном предложении найти самое короткое и самое длинное слово
Строка вводится с клавиатуры. Нужно выполнить задание, не применяя функций типа strtok и прочих,...

Найдите самое длинное, и самое короткое слово в заданном предложении
Найдите самое длинное и самое короткое слово в заданном предложении.

Поменять местами в предложении самое длинное и самое короткое слово
Сам код, но тут 12 ошибок выдает в логе: #include "stdafx.h" #include <iostream> #include...

В каждом предложении требуется поменять местами самое длинное и самое короткое слово
Введите текст, заканчивающийся знаком *. Каждое предложение заканчивается точкой. В каждом...

24
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 00:20 2
сначала на словах расскажу ))

для обработки текста можно создать двумерный массив типа string. Каждая строка массива - отдельное предложение. А столбцы - слова этого предложения. то есть элемент (i,j) - j-ое слово i-ого предложения.
Для того чтобы текст разбить на предложения надо последовательно в цикле считывать символы с клавы (или из файла), как только пробел - записываем в текущую строку массива на текущее место считанное слово, и увеличиваем счетчик j (столбца) для текущего i (строки). И так далее до точки. Как только считали точку - переходим на новую строку массива и повторяем процесс. И так далее до введенного Enter ('\n') (или конца файла, если считывали из файла)- то есть до конца ввода текста.
А затем уже по каждой строке массива вычисляешь длину каждого слова (есть спец. функция, а можно и самой в цикле). И сравниваешь с уже вычисленными и запоминаешь номер строки массива (для того чтобы узнать - из одного они предложения или нет) и номер столбца(чтобы заново слова не искать при необходимости замены на *) как для самого большого, так и для самого маленького слова. в общем, все равно как найти минимальный и максимальный элемент в двумерном массиве. ну и если запомненные номера предложений (то есть номера строки массива) искомых слов совпали - то меняешь их на звездочки.
2
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 17:43  [ТС] 3
liebe, оххххх...как все сложно(((у вас нет никакого примера похожего,а то трудно наинать с нуля....а так огромное спасибо....я теперь поняла что делать...осталось только понять КАК))
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 17:56 4
Цитата Сообщение от ta_4to Посмотреть сообщение
liebe, оххххх...как все сложно(((у вас нет никакого примера похожего,а то трудно наинать с нуля....а так огромное спасибо....я теперь поняла что делать...осталось только понять КАК))
примера нет, но могу написать ))) только вопрос, тебе (давай на ты ) надо именно символьный массив или можно строковый? и обязательно прям с ним все прогу работать или можно для галочки? (есть просто покороче вариант)
0
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 18:01  [ТС] 5
liebe,
если не трудно то помоги плиз)ну задание заключается в том чтоб работать со строками....и типа постараться не использовать стандартных функций которые определяют длину слова и что там еще.....
хорошо давай на ты))
0
9 / 7 / 3
Регистрация: 30.08.2008
Сообщений: 120
25.02.2010, 18:27 6
ta_4to а списки можно использовать вместо массива?
0
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 18:39  [ТС] 7
Sined, неа(
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 19:47 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вроде работает )) но так как нет полного текста задания, то сама придумала че делать в конце, и если есть несколько слов с одинаковой мин.длиной (макс. длиной) - выбираю первые встретившееся. В строке s1 - разделительные символы между словами, в s2 - между преложениями.если че - добавь нужные. А вообще не плохо бы увидеть весь текст задания
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <sstream>
 
using namespace std;
int main()
{
    char ch,mas[1000];
    string s1=".!?", s2=" ,;-:";
    int i,max=0,min=1000,flag2,flag1,num_ch, current_len=0, num_sent=0, end_maxw,end_minw, num_sentmax,num_sentmin;
 
num_ch=-1;
while (cin.get(ch)) 
{ 
    num_ch++; mas[num_ch]=ch;
    
    flag1=0;
    for (i=0;i<s1.length();i++)
       if (ch==s1[i]) flag1=1;
 
    flag2=0; 
    for (i=0;i<s2.length();i++)
        if (ch==s2[i]) flag2=1;
 
    if ((flag1==0)&&(flag2==0)&&(ch!='\n')) current_len++;
    else if (current_len>0){
                        if (current_len>max) {max = current_len;  end_maxw = num_ch-1; num_sentmax = num_sent;}
                        if (current_len<min) {min = current_len;  end_minw = num_ch-1; num_sentmin = num_sent;}
                        current_len=0;
                        }
    if (flag1==1) num_sent++;
    if (ch=='\n') break;
} 
 
if (num_sentmax==num_sentmin) 
{
    for (i=end_maxw;i>end_maxw-max;i--)
        mas[i]='*';
    for (i=end_minw;i>end_minw-min;i--)
        mas[i]='*';
}
cout<<"min_dlina="<<min<<endl;
cout<<"max_dlina="<<max<<endl;
for (i=0;i<=num_ch;i++)
    cout<<mas[i];
 
return 0;}
1
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 19:58  [ТС] 9
Требования к реализации:
1) Начальные данные вводятся с клавиатуры с организацией необходимого диалога с пользователем, используя элементарный форматированный ввод-вывод.
2) Использование указателей для доступа к элементам обработки.
3) Преобразование строк происходит в той же области памяти, если это не оговорено в условии задания.
4) Использование встроенных функций работы со строками.
5) Если не оговорено отдельно, слова в предложениях могут отделяться любыми знаками препинания, количество пробелов не ограничено.
6) Тестирование программы провести на вариантах входной информации, которые предусматривают разные ситуации в пределах ограничений в постановке задачи. Анализ результатов необходимо провести самостоятельно до демонстрации программы преподавателю и зафиксировать тесты в тетради.
7) Программа должна сопровождаться комментарием, которой заключает в себе: П.И.Б., шифр группы, полное условие задания, примечания (если необходимо).
8) При наличии любых ограничений на входную информацию, или на алгоритм, они должны быть отмеченные в комментарии после условия задания.

Оригинал
Вимоги до реалізації:
1) Початкові дані вводяться з клавіатури з організацією необхідного діалогу з користувачем, використовуючи елементарне форматоване введення-виведення.
2) Використання покажчиків для доступу до елементів обробки.
3) Перетворення рядків відбувається у тій самій області пам’яті, якщо це не оговорено в умові завдання.
4) Використання вбудованих функцій роботи з рядками.
5) Якщо не оговорено окремо, слова у реченнях можуть відокремлюватись будь-якими розді-ловими знаками, кількість прогалин не обмежена.
6) Тестування програми провести на варіантах вхідної інформації, які передбачають різні си-туації у границях обмежень у постановці задачі. Аналіз результатів необхідно провести са-мостійно до демонстрації програми викладачу та зафіксувати тести у зошиті.
7) Програма повинна супроводжуватися коментарем, якій містить в собі: П.І.Б., шифр групи, повну умову завдання, примітки (якщо необхідно).
8) При наявності будь-яких обмежень на вхідну інформацію, або на алгоритм, вони повинні бути зазначені в коментарі після умови завдання.


вот типа требования...но они на укр языке)))
спасибки большое)) сейчас буду смотреть...

Добавлено через 4 минуты
а у меня выдает ошибку на
#include <sstream>
у меня ВС++3.11...
а как такой инклуд записать в С?
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 20:11 10
убери его - он не нужен, на всяк пож написала
..извини, я украинский не знаю (
0
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 20:16  [ТС] 11
Требования к реализации: 1) Начальные данные вводятся из клавиатуры с организацией необходимого диалога с пользователем, используя элементарное форматированное введение-выведение. 2) Использование указателей для доступа к элементам обработки. 3) Превращение строк происходит в той же области памяти, если это не оговорено в условии задания. 4) Использование встроенных функций работы со строками. 5) Если не оговорено отдельно, слова в предложениях могут отделяться любыми розделительными знаками
у меня теперь 5 ошибок пишет....

Цитата Сообщение от liebe Посмотреть сообщение
string s1=".!?", s2=" ,;-:";
тут

Цитата Сообщение от liebe Посмотреть сообщение
for (i=0;i<s1.length();i++)
и тут

Цитата Сообщение от liebe Посмотреть сообщение
for (i=0;i<s2.length();i++)
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 22:36 12
даже не знаю...у меня не выдает никаких ошибок... придется ждать помощи от других...а расширение какое?
0
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 22:39  [ТС] 13
.срр
ага надеюсь помогут)) спасибки тебя большое))
интересно в чем же проблема....просто пишет что необьявленны "string","s1","s2"
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 22:44 14
сейчас он не знает что такое "string" - думает что это имя переменной, а тип не указан..тоже самое для s1,s2 ну и соответственно все что с этим классом связано тоже не знает
0
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 22:54  [ТС] 15
liebe, та я поняла что он не знаю что это такое..просто я так поняла нужно правильно обьявить тип стринг и ве ошибки исчезнут)верно?
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
25.02.2010, 23:52 16
да )) только я не знаю как это сделать в ВС++ 3.11...я делала в 6-ом ВС - там все работает

Добавлено через 44 минуты
попробуй переписать
C++
1
2
3
 char *s1,*s2; // вместо string s1=".!?", s2=" ,;-:";
 s1=".!?"; 
 s2=" ,;-:";
а в цикле вместо s1.length() написать strlen(s1) (тоже самое для s2)
C++
1
2
3
...
for (i=0;i<strlen(s1);i++)
...
все остальное без изменений.надеюсь поможет
1
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
25.02.2010, 23:59  [ТС] 17
Цитата Сообщение от liebe Посмотреть сообщение
strlen
не читает..может какой то инклуд надо подключить?
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
26.02.2010, 00:08 18
у меня только это перед int main()
C++
1
2
3
#include <iostream>
using namespace std;
...
может stdlib.h поможет..
а вообще эта функция определения длины строки. Эти строки (s1 и s1) - константы, ты можешь сама посчитать сколько там символов (то есть узнать длину) и написать точную цифру...
0
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
26.02.2010, 00:18  [ТС] 19
ниче не помогает((( интересно в чем причина....пишет что тип функция не корректна...
0
...
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
26.02.2010, 00:26 20
нда...а у меня и так, и так съел...
посчитай сама длину в цикле - не парься ))) или точную цифру напиши прям в цикле )) потом может кто еще все-таки заглянет сюда и посоветует, а так тяжело пальцем в небо тыкать не имея ВС 3.11

вообще говоря, у тебя в задании написано в пункте 4 использовать встренные функции работы со строками...эти два цикла for нужны были для того чтобы узнать пренадлежит ли введенный символ строке (то есть является ли он разделительным)- для этого есть спец. фукнция, можешь ее использовать (правда я не помню какая, посмотри где-нить )
1
26.02.2010, 00:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2010, 00:26
Помогаю со студенческими работами здесь

В заданном предложении найти самое короткое и самое длинное слова
В заданном предложении найти самое короткое и самое длинное слова :-[

Ввести строку с клавиатуры. Найти самое длинное слово в строке и самое короткое
Ввести строку с клавиатуры. Найти самое длинное слово в строке и самое короткое. Слова...

Найти самое короткое и самое длинное слово в строке
Введённый строке найти самое короткое и длинное слово.словом считается последовательность...

Найти самое короткое и самое длинное слово в строке
Посмотрите на код, что не так пишу? #include &lt;iostream&gt; #include &lt;string.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru