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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реализация класса множество через двусвязный список. http://www.cyberforum.ru/cpp-beginners/thread377617.html
дали задание реализовать класс множество через двусвязный список. Сам класс список мне реализовать вроде удалось, но стоит загвоздка в том, как реализовать некоторые функции для множества:...
C++ Построить класс для описания плоской геометрической фигуры прямоугольник Построить класс для описания плоской геометрической фигуры прямоугольник. Предусмотреть методы для создания объектов и изменения. http://www.cyberforum.ru/cpp-beginners/thread377593.html
ошибка в функции подскажите как исправить C++
в функции ввод списка с экрана, там был бесконечный цикл который прерывался операторов Break, препод сказал что это не грамотно прерывать цикл с помощью Break, попытался в while само условие написать...
C++ Определение матрицы смежности графа по заданной матрице инцидентности
Доброй ночи :) Изучаю графы, написал фукнцию для конвертации матрицы инцидентности в матрицу смежности, а наоборот не выходит. Слева на рисунке матрицы инцидентности, с неё получаю матрицу...
C++ Unicod http://www.cyberforum.ru/cpp-beginners/thread377531.html
Доброго времени суток. Подскажите кто знает достойный материал(возможно книги) по использованию юникода в срр приложениях. Об LPWSTR WCHAR и тд. С юникодам ранее практически не работал, а найти...
C++ Найти все натуральные числа, не превышающие заданного N, которые делятся на каждую из своих цифр. Найти все натуральные числа, не превышающие заданного N, которые делятся на каждую из своих цифр. Надо решить через функцию .Без массивов. подробнее

Показать сообщение отдельно
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru