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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
04.11.2011, 12:05     Найти самое короткое из слов в предложении #1
задание на строки
Дана символьная строка.Слово-последовательность символов между пробелами, не содерж. пробелы внутри себя.Найти самое короткое из слов в предложении
Как написать?надо написать на обычном элементарном си, т.к. только начинаю программировать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 12:05     Найти самое короткое из слов в предложении
Посмотрите здесь:

Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором предложении C++
C++ Даны два предложения. Найти самое короткое из слов первого предложения,которого нет во втором предложений?
C++ самое короткое слово первой строки,которого нет во втором предложении
C++ самое короткое слов в строке
C++ В заданном предложении удалить самое короткое слово
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
04.11.2011, 12:48     Найти самое короткое из слов в предложении #2
Цитата Сообщение от 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;
}
Миниатюры
Найти самое короткое из слов в предложении  
Просто лис
Путешественник вселенной
 Аватар для Просто лис
187 / 153 / 71
Регистрация: 01.03.2011
Сообщений: 664
04.11.2011, 12:51     Найти самое короткое из слов в предложении #3
-=ЮрА=-, интересная программа.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.11.2011, 13:10     Найти самое короткое из слов в предложении #4
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;
}
Код
[guest@localhost tests]$ .ansi t.c -o t
[guest@localhost tests]$ ./t
c
[guest@localhost tests]$
-=ЮрА=-
Заблокирован
Автор FAQ
04.11.2011, 13:57     Найти самое короткое из слов в предложении #5
Цитата Сообщение от Просто лис Посмотреть сообщение
-=ЮрА=-, интересная программа.
Спасибо! Как вариант - здесь похожее задание, только логика выбора слов другая В символьной строке удалить все слова, состоящие из нечетного количества букв.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.11.2011, 14:13     Найти самое короткое из слов в предложении #6
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";
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
04.11.2011, 14:52     Найти самое короткое из слов в предложении #7
Почему код выше учитывает знаки препинания, то есть
вход - 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!

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

Добавлено через 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"
-=ЮрА=-
Заблокирован
Автор FAQ
04.11.2011, 22:31     Найти самое короткое из слов в предложении #10
Цитата Сообщение от 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/reference/c...stdio/sprintf/

Добавлено через 2 минуты
Цитата Сообщение от keep-it-real Посмотреть сообщение
strtok
Функция strtok() возвращает указатель на следующую лексему в строке отделённую символами из
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
char delim[] = " ,.!?;";//Разделители между словами
О strtok читайте здесь http://www.cplusplus.com/reference/c...string/strtok/
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
04.11.2011, 22:43  [ТС]     Найти самое короткое из слов в предложении #11
а нельзя ли как-то обходиться без таких функций как strkok, sprintf ?? просто только начинаю знакомиться с языком си, хотелось бы попроще реализовать алгоритм, возможно ваш вариант и есть проще, но как-то что ли используя элементарные функции?
-=ЮрА=-
Заблокирован
Автор FAQ
04.11.2011, 23:59     Найти самое короткое из слов в предложении #12
Цитата Сообщение от keep-it-real Посмотреть сообщение
а нельзя ли как-то обходиться без таких функций как strkok, sprintf ?? просто только начинаю знакомиться с языком си, хотелось бы попроще реализовать алгоритм, возможно ваш вариант и есть проще, но как-то что ли используя элементарные функции?
- понимаете нельзя сесть на обычный байк, даже с коляской, не имея запаса базовых знаний, если вы только начали изучение Си(т.е купили себе велик), почему не отработате алгоритмы со строками, выбор подстроки, доступ к элементам (не учитесь на велике кататься), а сразу хотите не умея ездить на велике ездить на байке с коляской???
Да не вопрос я могу предложить вам алгоритм с элементарным пробором символов, только смотрите, ввод в такой алгоритм даже обработки знаков препинания потребует увеличения сложности, вконце концов ваше "просто" выльеться в нечто сложное...Разберитесь в предложенном алгоритме досконально, вот сядьте и построчно для себя обдумайте каждую строку, лягте спать, завтра снова посидите и когда вам вдруг прийдёт понимание, а оно прийдёт так вы сидеть будете, вы уже сразу научитесь и на велике ездить и на байке(т.к. пройдёте автошколу), а не будете сегать на байк не понимая, что такое кардан или свеча зажигание...
Я не хочу обидеть, просто открываю глаза!Если хотите очень просто - это пост 4 от accept он просто написал, где-то под знание почти начинающего, но и алгоритм тоже прост, текст со знаками будет разбит не совсем корректно в плане выделения слов...
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2011, 00:19     Найти самое короткое из слов в предложении #13
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:Я правда не хотел обижать в предыдущем посте, но всё же решение определённых задач элементарными понятными методами делают алгоритм очень тяжеловесным и раздутым...

Миниатюры
Найти самое короткое из слов в предложении  
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 01:05     Найти самое короткое из слов в предложении #14
Цитата Сообщение от -=ЮрА=-
текст со знаками будет разбит не совсем корректно в плане выделения слов...
Цитата Сообщение от keep-it-real
Слово-последовательность символов между пробелами, не содерж. пробелы внутри себя.
_____
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
05.11.2011, 08:30     Найти самое короткое из слов в предложении #15
Цитата Сообщение от diagon Посмотреть сообщение
Разве? Не учитывает же. И на выходе dva будет.
действительно) что-то я.
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 10:48  [ТС]     Найти самое короткое из слов в предложении #16
-=ЮрА=-, да я не обижаюсь просто пока что для меня сложновато быстро соображать в программах, поэтому сидела разбиралась с вашей все утро, единственное почему-то у меня не поддерживается библиотека #include <conio.h> а соответственно и функция getch();
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2011, 12:52     Найти самое короткое из слов в предложении #17
Цитата Сообщение от keep-it-real Посмотреть сообщение
единственное почему-то у меня не поддерживается библиотека #include <conio.h> а соответственно и функция getch();
- ну ок закоменть
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <conio.h>
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
printf("Press any key to continue\n");
* * * * getch();
- а какой компилятор используешь???
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 14:32  [ТС]     Найти самое короткое из слов в предложении #18
я коментила и вообще не работала прога, выдает
Введите строку jdj djs d

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

Добавлено через 1 час 5 минут
думаю, мб лучше с указателями попробовать, а если рассматривать вариант товарища accept, то можно поменять ли вместо заданной в программе строки на вводимую строку при запуске программы
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2011, 14:44     Найти самое короткое из слов в предложении #19
Цитата Сообщение от keep-it-real Посмотреть сообщение
я коментила и вообще не работала прога, выдает
Введите строку jdj djs d
- введите туже строку только наоборот и посмотрите что будет, признаю я недопаял обработку последнего слова - если будете вводить пробел после последнего слова, то отработет и с jdj djs d !Ну вот взяли бы вдумались в алгоритм и доработали бы - а так только всё готовое надо, так вы ничему не научитесь!Ну да ладно вы не очень то любезны так как позволил себе прямо сказать что с малыми знаниями кидаться решать задачи посложней нерационально, помогать желание отпало...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2011, 15:02     Найти самое короткое из слов в предложении
Еще ссылки по теме:

C++ В заданном предложении поменять местами самое длинное и самое короткое слова
C++ Заданный список из 8 слов. Найти самое короткое слово из списка
Найдите самое длинное, и самое короткое слово в заданном предложении C++

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

Или воспользуйтесь поиском по форуму:
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 15:02  [ТС]     Найти самое короткое из слов в предложении #20
-=ЮрА=-, да не, сейчас попробую с вашей разобраться) просто, когда не получается, уже хочется какого-нибудь результата достичь

Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
введите туже строку только наоборот и посмотрите что будет, признаю я недопаял обработку последнего слова - если будете вводить пробел после последнего слова, то отработет и с jdj djs d
а все равно не выдает
Yandex
Объявления
05.11.2011, 15:02     Найти самое короткое из слов в предложении
Ответ Создать тему
Опции темы

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