С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/37: Рейтинг темы: голосов - 37, средняя оценка - 4.81
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47

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

04.11.2011, 12:05. Показов 7367. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задание на строки
Дана символьная строка.Слово-последовательность символов между пробелами, не содерж. пробелы внутри себя.Найти самое короткое из слов в предложении
Как написать?надо написать на обычном элементарном си, т.к. только начинаю программировать
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2011, 12:05
Ответы с готовыми решениями:

Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором предложении
Здравствуйте. Есть задача (написана в теме), есть решение: #include <iostream> #include <string> #include...

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

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

46
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.11.2011, 12:48
Цитата Сообщение от keep-it-real Посмотреть сообщение
задание на строки
Дана символьная строка.Слово-последовательность символов между пробелами, не содерж. пробелы внутри себя.Найти самое короткое из слов в предложении
Как написать?надо написать на обычном элементарном си, т.к. только начинаю программировать
Ниже код на Си и скриншот работы
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
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
 
int main()
{   
    long sLen;//Áóäåò ñîäåðæàòü â ñåáå äëèííó òåêóùåãî ñëîâà
    long mLen;//Áóäåò ñîäåðæàòü â ñåáå ìèí äëèííó ñëîâà â ñòðîêå
    char chr;
    char str[1024];//èñõîäíàÿ ñòðîêà
    char buf[1024];//áóôôåð
    char delim[] = " ,.!?;";//Ðàçäåëèòåëè ìåæäó ñëîâàìè
    printf("\tEnter input string\n");
    scanf("%[^\n]%c",str,&chr);//Â str òî ÷òî ââåëè â chr - '\n' îò ââîäà
    sprintf(buf,"%s",str);
    char * word = strtok(buf,delim);
    if(!word)
        printf("String not contain words or empty!\n");
    else
    {
        //Èùåì äëèííó ìèí ñëîâà
        //Çàïèñàëè â mLen äëèííó 1-ãî ñëîâà
        mLen = strlen(word);
        word = strtok(NULL,delim);
        while(word)
        {
            sLen = strlen(word);
            if(sLen < mLen)
                mLen = sLen;
            word = strtok(NULL,delim);
        }
        //Òåïåðü óæå èùåì ñàìî ñëîâî ñ äëèííîé mLen
        word = strtok(str,delim);
        while(word)
        {
            sLen = strlen(word);
            if(mLen == sLen)
                break;
            word = strtok(NULL,delim);
        }
        printf("\tWord with min length : %s\n",word);
    }
    system("pause");
    return 0;
}
Миниатюры
Найти самое короткое из слов в предложении  
1
Путешественник вселенной
 Аватар для Просто лис
189 / 161 / 119
Регистрация: 01.03.2011
Сообщений: 664
04.11.2011, 12:51
-=ЮрА=-, интересная программа.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.11.2011, 13:10
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
#include <stdio.h>
#include <string.h> 
 
int main(void)
{
    const char *line, *p;
    char word[100], tmp[100];
    int len, minlen;
    int c, state;
    
    line = "abcdab c defgababcd";
    
    minlen = 0;
    state = 0;
    for (p = line; (c = *p) != '\0'; p++)
        if (state == 0) {
            if (c != ' ') {
                len = 0;
                p--;
                state = 1;
            }
        } else {
            if (c != ' ') {
                tmp[len++] = c;
                tmp[len] = '\0';
            }
            if (c == ' ' || *(p + 1) == '\0') {
                if (minlen == 0 || len < minlen) {
                    minlen = len;
                    strcpy(word, tmp);
                }
                state = 0;
            }
        }
    
    printf("%s\n", word);
    
    return 0;
}
Code
1
2
3
4
[guest@localhost tests]$ .ansi t.c -o t
[guest@localhost tests]$ ./t
c
[guest@localhost tests]$
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.11.2011, 13:57
Цитата Сообщение от Просто лис Посмотреть сообщение
-=ЮрА=-, интересная программа.
Спасибо! Как вариант - здесь похожее задание, только логика выбора слов другая В символьной строке удалить все слова, состоящие из нечетного количества букв.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.11.2011, 14:13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream>
#include <set>
 
bool cmp( const std::string& a, const std::string& b )
{
    return a.length() < b.length();
}
 
int main()
{
    std::string str;
    std::cout << "Enter string" << std::endl;
    std::getline( std::cin, str );
    
    bool (*fn_pt)( const std::string&, const std::string& ) = cmp;
    std::set< std::string, bool (*) (const std::string&, const std::string&) > words(fn_pt);
    
    for ( std::istringstream ist(str) ; ist >> str ; words.insert(str) ) ;
    
    std::cout << "Shortest word is \"" << *words.begin() << "\"\n";
}
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.11.2011, 14:52
Почему код выше учитывает знаки препинания, то есть
вход - raz! dva tri
выход - raz

А если написать так -
C++
1
2
3
std::vector <std::string> vec;
for ( std::istringstream ist(str) ; ist >> str ; vec.push_back(str)) ;
std::cout << *vec.begin();
то на выходе будет - raz!

Я код привел не по задаче, а просто деление на слова.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.11.2011, 17:29
Цитата Сообщение от neske Посмотреть сообщение
Почему код выше учитывает знаки препинания, то есть
вход - raz! dva tri
выход - raz
Разве? Не учитывает же. И на выходе dva будет.
1
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
04.11.2011, 21:55  [ТС]
спасибо, товарищи, пойду разбираться над задачей

Добавлено через 2 часа 52 минуты
-=ЮрА=-, не совсем понятны эти строки в вашей программе
C
1
2
3
scanf("%[^\n]%c",str,&chr);//В str то что ввели в chr - '\n' от ввода
        sprintf(buf,"%s",str);
        char * word = strtok(buf,delim);
что такое sprintf, strtok ???
и что значит вот это
C
1
"%[^\n]%c"
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.11.2011, 22:31
Цитата Сообщение от keep-it-real Посмотреть сообщение
не совсем понятны эти строки в вашей программе
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
scanf("%[^\n]%c",str,&chr);//В str то что ввели в chr - '\n' от ввода
- считываем строку(даже если есть пробелы) до символа \n, т.е. по тот символ после которого Enter жмакнули

Не по теме:

Фактически С++ аналог scanf("%[^\n] - это getline



Добавлено через 1 минуту
Цитата Сообщение от keep-it-real Посмотреть сообщение
что такое sprintf
Цитата Сообщение от keep-it-real Посмотреть сообщение
sprintf(buf,"%s",str);
- скопировали содеримое str в buf об sprintf читайте по этой ссылке http://www.cplusplus.com/refer... o/sprintf/

Добавлено через 2 минуты
Цитата Сообщение от keep-it-real Посмотреть сообщение
strtok
Функция strtok() возвращает указатель на следующую лексему в строке отделённую символами из
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
char delim[] = " ,.!?;";//Разделители между словами
О strtok читайте здесь http://www.cplusplus.com/refer... ng/strtok/
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
04.11.2011, 22:43  [ТС]
а нельзя ли как-то обходиться без таких функций как strkok, sprintf ?? просто только начинаю знакомиться с языком си, хотелось бы попроще реализовать алгоритм, возможно ваш вариант и есть проще, но как-то что ли используя элементарные функции?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.11.2011, 23:59
Цитата Сообщение от keep-it-real Посмотреть сообщение
а нельзя ли как-то обходиться без таких функций как strkok, sprintf ?? просто только начинаю знакомиться с языком си, хотелось бы попроще реализовать алгоритм, возможно ваш вариант и есть проще, но как-то что ли используя элементарные функции?
- понимаете нельзя сесть на обычный байк, даже с коляской, не имея запаса базовых знаний, если вы только начали изучение Си(т.е купили себе велик), почему не отработате алгоритмы со строками, выбор подстроки, доступ к элементам (не учитесь на велике кататься), а сразу хотите не умея ездить на велике ездить на байке с коляской???
Да не вопрос я могу предложить вам алгоритм с элементарным пробором символов, только смотрите, ввод в такой алгоритм даже обработки знаков препинания потребует увеличения сложности, вконце концов ваше "просто" выльеться в нечто сложное...Разберитесь в предложенном алгоритме досконально, вот сядьте и построчно для себя обдумайте каждую строку, лягте спать, завтра снова посидите и когда вам вдруг прийдёт понимание, а оно прийдёт так вы сидеть будете, вы уже сразу научитесь и на велике ездить и на байке(т.к. пройдёте автошколу), а не будете сегать на байк не понимая, что такое кардан или свеча зажигание...
Я не хочу обидеть, просто открываю глаза!Если хотите очень просто - это пост 4 от accept он просто написал, где-то под знание почти начинающего, но и алгоритм тоже прост, текст со знаками будет разбит не совсем корректно в плане выделения слов...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.11.2011, 00:19
keep-it-real, решил написать свой "простой вариант", не знаю проще уже некуда - ни одной стандартной функции кроме printf и scanf
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    long i,j;
    long sLen = 0;//Будет содержать в себе длинну текущего слова
    long mLen = 1024;//Будет содержать в себе мин длинну слова в строке
    char str[1024] = {0};//исходная строка
    printf("\tEnter input string\n");
    //В Си строку с пробелами по другому думаю и не ввести!
    scanf("%[^\n]",str);//В str то что ввели в chr - '\n' от ввода
    char min_word[32] = {0};
    char cur_word[32] = {0};
    for(i = 0; str[i] != '\0';i++)
    {
        if(str[i] == ' ' || str[i] == '\0')
        {
            if(sLen < mLen)
            {
                mLen = sLen;
                //Копируем cur_word в min_word
                for(j = 0; j < sLen; j++)
                    min_word[j] = cur_word[j];
                min_word[sLen] = '\0';
            }
            sLen = 0;
        }
        else
        {
            cur_word[sLen] = str[i];
            sLen++;
        }
    }
    printf("Word with min len : %s\n",min_word);
    printf("Press any key to continue\n");
    getch();
    return 0;
}

Не по теме:

PS:Я правда не хотел обижать в предыдущем посте, но всё же решение определённых задач элементарными понятными методами делают алгоритм очень тяжеловесным и раздутым...

Миниатюры
Найти самое короткое из слов в предложении  
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.11.2011, 01:05
Цитата Сообщение от -=ЮрА=-
текст со знаками будет разбит не совсем корректно в плане выделения слов...
Цитата Сообщение от keep-it-real
Слово-последовательность символов между пробелами, не содерж. пробелы внутри себя.
_____
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
05.11.2011, 08:30
Цитата Сообщение от diagon Посмотреть сообщение
Разве? Не учитывает же. И на выходе dva будет.
действительно) что-то я.
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 10:48  [ТС]
-=ЮрА=-, да я не обижаюсь просто пока что для меня сложновато быстро соображать в программах, поэтому сидела разбиралась с вашей все утро, единственное почему-то у меня не поддерживается библиотека #include <conio.h> а соответственно и функция getch();
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.11.2011, 12:52
Цитата Сообщение от keep-it-real Посмотреть сообщение
единственное почему-то у меня не поддерживается библиотека #include <conio.h> а соответственно и функция getch();
- ну ок закоменть
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <conio.h>
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
printf("Press any key to continue\n");
* * * * getch();
- а какой компилятор используешь???
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 14:32  [ТС]
я коментила и вообще не работала прога, выдает
Введите строку jdj djs d

Самое короткое слово:

Добавлено через 1 час 5 минут
думаю, мб лучше с указателями попробовать, а если рассматривать вариант товарища accept, то можно поменять ли вместо заданной в программе строки на вводимую строку при запуске программы
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.11.2011, 14:44
Цитата Сообщение от keep-it-real Посмотреть сообщение
я коментила и вообще не работала прога, выдает
Введите строку jdj djs d
- введите туже строку только наоборот и посмотрите что будет, признаю я недопаял обработку последнего слова - если будете вводить пробел после последнего слова, то отработет и с jdj djs d !Ну вот взяли бы вдумались в алгоритм и доработали бы - а так только всё готовое надо, так вы ничему не научитесь!Ну да ладно вы не очень то любезны так как позволил себе прямо сказать что с малыми знаниями кидаться решать задачи посложней нерационально, помогать желание отпало...
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 15:02  [ТС]
-=ЮрА=-, да не, сейчас попробую с вашей разобраться) просто, когда не получается, уже хочется какого-нибудь результата достичь

Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
введите туже строку только наоборот и посмотрите что будет, признаю я недопаял обработку последнего слова - если будете вводить пробел после последнего слова, то отработет и с jdj djs d
а все равно не выдает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.11.2011, 15:02
Помогаю со студенческими работами здесь

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

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

В заданном предложении поменять местами самое длинное и самое короткое слова
В заданном предложении поменять местами самое длинное и самое короткое слова. Считать, что слова в тексте отделены друг от друга одним...

Поменять местами в предложении самое длинное и самое короткое слово
Сам код, но тут 12 ошибок выдает в логе: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include&lt;vector&gt; ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru