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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
#1

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

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

задание на строки
Дана символьная строка.Слово-последовательность символов между пробелами, не содерж. пробелы внутри себя.Найти самое короткое из слов в предложении
Как написать?надо написать на обычном элементарном си, т.к. только начинаю программировать
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 12:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти самое короткое из слов в предложении (C++):

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

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

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

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

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

Заданный список из 8 слов. Найти самое короткое слово из списка - C++
Ребята, кто сможет такое сделать ? Не имею понятие как вообще это сделать, заранее благодарю. Заданный список из 8 слов. Найти самое...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 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';
    }
}
1
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 14:36  [ТС] #32

Не по теме:

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



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

Не по теме:

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


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

Не по теме:

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

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

Не по теме:

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

0
keep-it-real
25 / 0 / 1
Регистрация: 25.05.2010
Сообщений: 47
06.11.2011, 20:57  [ТС] #41
-=ЮрА=-, это с 2мерными массивами?
0
-=ЮрА=-
06.11.2011, 21:03
  #42

Не по теме:

Цитата Сообщение от keep-it-real Посмотреть сообщение
-=ЮрА=-, это с 2мерными массивами?
- нет же на первом проборе слов опредлили min_len длинну выводимых слов, на втором проборе, выводим только слова c min_len, вот и всё...

0
keep-it-real
06.11.2011, 21:09  [ТС]
  #43

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

- нет же на первом проборе слов опредлили min_len длинну выводимых слов, на втором проборе, выводим только слова c min_len, вот и всё...

можете показать в программе?

0
-=ЮрА=-
06.11.2011, 21:14
  #44

Не по теме:

Цитата Сообщение от keep-it-real Посмотреть сообщение
можете показать в программе?
- ок, но сейчас я занят, если никто вам не покажет, через пару часиков навестите топик, как вариант попробуйте за это врмя что то от себя представить и вам интересно будет и потом сравните с моим алгоритмом. PS:Я буду писать под свои for-ы, если вам нужен код accept пусть он свой приведёт ок?(я не люблю дописывать коды других продвинутых форумчан - каждый художник пишет свои картины и программисты тоже

0
keep-it-real
06.11.2011, 21:21  [ТС]     Найти самое короткое из слов в предложении
  #45

Не по теме:

-=ЮрА=-, без проблем

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 21:21
Привет! Вот еще темы с ответами:

Ввести строку, содержащую несколько слов. Определить самое длинное и самое короткое слово - C++
Здравствуйте, не могли бы мне помочь с кодом. Как его переписать, чтобы программа работала? #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

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

Даны два предложения. Найти самое короткое из слов первого предложения,которого нет во втором предложений? - C++
Даны два предложения. Найти самое короткое из слов первого предложения,которого нет во втором предложений?

самое короткое слов в строке - C++
Дана строка символов,состоящая из слов,разделенных пробелами. Распечатать исходную строку. Определить самые короткие слова в строке...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru