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

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

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

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

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

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

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

46
05.11.2011, 15:13
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от keep-it-real Посмотреть сообщение
а все равно не выдает
ещё раз на пальцах:
jdj djs d + пробел при вводе после последней d !!!:wall:

Миниатюры
Найти самое короткое из слов в предложении  
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 15:31  [ТС]
да я не глупая, я так и вводила, все равно))
не знаю почему

Добавлено через 6 минут

Не по теме:

ладно, пойду дальше думать

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.11.2011, 16:49
Цитата Сообщение от keep-it-real Посмотреть сообщение
да я не глупая, я так и вводила, все равно))
не знаю почему
- какой компилятор у Вас?Я сейчас подпаяю...
1
05.11.2011, 16:51  [ТС]

Не по теме:

всё! я разобралась) моя ошибка! брат еще помог)

-=ЮрА=-, спасибо вам большое за большую часть проделанной работы)

0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.11.2011, 16:56
Цитата Сообщение от keep-it-real
а если рассматривать вариант товарища accept, то можно поменять ли вместо заданной в программе строки на вводимую строку при запуске программы
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
47
48
49
50
51
52
53
54
55
56
57
 
#include <stdio.h>
#include <string.h> 
 
void rmlf(char *s);
 
int main(void)
{
    char line[1000], *p;
    char word[100], tmp[100];
    int len, minlen;
    int c, state;
    
    fputs("Enter: ", stdout);
    fflush(stdout);
    if (fgets(line, sizeof line, stdin) == NULL)
        return 1;
    rmlf(line);
    /* strcpy(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("Shortest: %s\n", word);
    
    return 0;
}
 
void rmlf(char *s)
{
    if (*s != '\0') {
        while (*(s + 1) != '\0')
            s++;
        if (*s == '\n')
            *s = '\0';
    }
}
Code
1
2
3
4
5
[guest@localhost tests]$ .ansi t.c -o t
[guest@localhost tests]$ ./t
Enter: abcdab c defgababcd
Shortest: c
[guest@localhost tests]$
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 17:04  [ТС]
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
#include<stdio.h>
#include<string.h>
int main()
{ char *p;
  char line[1000],word[100], tmp[100];
  int len,minlen;
  int c,state;
  printf("Введите строку\n");
  scanf("%[^\n]",line);
 
  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;
     }
мне кажется и так могло бы работать
0
05.11.2011, 17:14

Не по теме:

Цитата Сообщение от keep-it-real Посмотреть сообщение
Не по теме:
всё! я разобралась) моя ошибка! брат еще помог)
-=ЮрА=-, спасибо вам большое за большую часть проделанной работы)
- ну ок тогды;)

0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.11.2011, 17:36
Цитата Сообщение от keep-it-real
мне кажется и так могло бы работать
1) нужно ограничить длину вводимого сообщения шириной поля, чтобы не произошла запись за пределы массива
1.1) эту ширину поля нужно формировать динамически на основе размера массива, а это нужно делать sprintf() и так далее
2) у тебя что-то произошло и нарушилось выравнивание блоков кода, а это очень важная вещь в программировании
3) куда делся void из определения main(), в C грамотно писать с void, иначе получается определение в старом стиле (до 89 года)
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 13:39  [ТС]
ничего себе) а я и не знала о таких вещах)
accept, а вы не могли бы закомментировать последнюю программу, чтобы я могла посидеть поразбираться, что где происходит?
0
06.11.2011, 13:58

Не по теме:

keep-it-real, цикл accept почти ничем не отличается от for-ов вместо str[i] идёт инкремент указателей, вам что с указателями нужно???

0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.11.2011, 14:00
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
#include <string.h> 
 
void rmlf(char *s);
 
int main(void)
{
    char line[1000], *p;
    char word[100], tmp[100];
    int len, minlen;
    int c, state;
    
    fputs("Enter: ", stdout);
    fflush(stdout);
    /* при выводе fputs() нет перевода строки
       сообщение нужно вывести, иначе оно может
       быть выведено только в конце программы */
    
    if (fgets(line, sizeof line, stdin) == NULL)
        return 1;
    /* если строка не прочитана,
       вернуть признак ошибки в исполняющую среду */
    
    rmlf(line);
    /* удалить перевод строки в конце, если он есть */
    
    /* strcpy(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("Shortest: %s\n", word);
    
    return 0;
}
 
/* удаляет перевод строки в конце s */
void rmlf(char *s)
{
    if (*s != '\0') {
        while (*(s + 1) != '\0')
            s++;
        if (*s == '\n')
            *s = '\0';
    }
}
1
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 14:36  [ТС]

Не по теме:

-=ЮрА=-, да не, я просто пока выходные хотела позаниматься) вот решила и в этом варианте поразбираться)



Добавлено через 22 минуты
а вот мне еще интересно, если будет такая ситуация, что в строке есть 2 разных слова, но одинаковой длины, он же выдаст только одно, нет?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
06.11.2011, 16:17
Цитата Сообщение от keep-it-real Посмотреть сообщение
а вот мне еще интересно, если будет такая ситуация, что в строке есть 2 разных слова, но одинаковой длины, он же выдаст только одно, нет?
- ну да выдаст первое из них и у меня и у алгоритма accept тоже, вы же не уточняли что делать если слов с мин длинной несколько...
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
06.11.2011, 16:18
по-моему в чистом С нет такой версии sizeof:
C
1
sizeof *var*
0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 16:25  [ТС]
-=ЮрА=-, ну да в задании этого нету, но я сама просто озадачилась сейчас
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
06.11.2011, 16:36

Не по теме:

Цитата Сообщение от OstapBender Посмотреть сообщение
о-моему в чистом С нет такой версии sizeof:
вам сюда
http://en.wikipedia.org/wiki/Sizeof


Цитата Сообщение от keep-it-real Посмотреть сообщение
-=ЮрА=-, ну да в задании этого нету, но я сама просто озадачилась сейчас
- думаю вы понимаете что алгоритм для случая нескольких слов одинаковой длинны либо подребует 2-х мерного массива, либо как минимум двух полных проходов алгоритма
Выбирайте что Вам по душе 2Д массив или увеличение числа операций?
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.11.2011, 16:44
минимальная длина остаётся известной после первого прохода
дальше нужно выбирать слова этой длины
0
06.11.2011, 16:56

Не по теме:

Цитата Сообщение от accept Посмотреть сообщение
минимальная длина остаётся известной после первого прохода
дальше нужно выбирать слова этой длины
- keep-it-real, вот поэтому и говорил о 2-х проходах...

0
25 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 20:31  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Выбирайте что Вам по душе 2Д массив или увеличение числа операций?
а я даже не знаю, что практичнее)
0
06.11.2011, 20:35

Не по теме:

Цитата Сообщение от keep-it-real Посмотреть сообщение
а я даже не знаю, что практичнее)
- как по мне 2 прохода - гемора меньше8-)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2011, 20:35

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru