Форум программистов, компьютерный форум 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++ В заданном предложении удалить самое короткое слово
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
05.11.2011, 15:13     Найти самое короткое из слов в предложении
  #21

Не по теме:

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 15:31  [ТС]     Найти самое короткое из слов в предложении #22
да я не глупая, я так и вводила, все равно))
не знаю почему

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

Не по теме:

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

-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2011, 16:49     Найти самое короткое из слов в предложении #23
Цитата Сообщение от keep-it-real Посмотреть сообщение
да я не глупая, я так и вводила, все равно))
не знаю почему
- какой компилятор у Вас?Я сейчас подпаяю...
keep-it-real
05.11.2011, 16:51  [ТС]
  #24

Не по теме:

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

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

accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 16:56     Найти самое короткое из слов в предложении #25
Цитата Сообщение от 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';
    }
}
Код
[guest@localhost tests]$ .ansi t.c -o t
[guest@localhost tests]$ ./t
Enter: abcdab c defgababcd
Shortest: c
[guest@localhost tests]$
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
05.11.2011, 17:04  [ТС]     Найти самое короткое из слов в предложении #26
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;
     }
мне кажется и так могло бы работать
-=ЮрА=-
05.11.2011, 17:14
  #27

Не по теме:

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

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

Не по теме:

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

accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 14:00     Найти самое короткое из слов в предложении #31
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';
    }
}
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 14:36  [ТС]     Найти самое короткое из слов в предложении #32

Не по теме:

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



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

Не по теме:

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


Цитата Сообщение от keep-it-real Посмотреть сообщение
-=ЮрА=-, ну да в задании этого нету, но я сама просто озадачилась сейчас
- думаю вы понимаете что алгоритм для случая нескольких слов одинаковой длинны либо подребует 2-х мерного массива, либо как минимум двух полных проходов алгоритма
Выбирайте что Вам по душе 2Д массив или увеличение числа операций?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2011, 16:44     Найти самое короткое из слов в предложении #37
минимальная длина остаётся известной после первого прохода
дальше нужно выбирать слова этой длины
-=ЮрА=-
06.11.2011, 16:56
  #38

Не по теме:

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

keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 20:31  [ТС]     Найти самое короткое из слов в предложении #39
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Выбирайте что Вам по душе 2Д массив или увеличение числа операций?
а я даже не знаю, что практичнее)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 20:35     Найти самое короткое из слов в предложении
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
06.11.2011, 20:35     Найти самое короткое из слов в предложении
  #40

Не по теме:

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

Yandex
Объявления
06.11.2011, 20:35     Найти самое короткое из слов в предложении
Ответ Создать тему
Опции темы

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