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

Вывести слова в порядке убывания количества символов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ СТРОКИ где же взять УРОКИ http://www.cyberforum.ru/cpp-beginners/thread80717.html
Подскажите где взять уроки на строки функции и указатели спс мило berezza9999@gmail.com:friends: Добавлено через 1 минуту Подскажите где взять уроки на строки функции и указатели спс мило berezza9999@gmail.com:friends:Мама, я дура?
C++ УРОКИ ДЛЯ НАЧИНАЮЩИХ Кому надо уроки по С++ под Win 32 console application могу предложить В уроки входит такие теми: -ввод ввивод литерели и.т -if,switch,enum и.т -цикли(while,for,do while) -srand,масиви сортировка -Примери и задачи, 100страниц первая часть есть другая http://www.cyberforum.ru/cpp-beginners/thread80708.html
C++ В одномерном массиве, который состоит из N целых элементов, обчислить произведение элементов массива с парными номерами в С++
В одномерном массиве, который состоит из N целых элементов, обчислить произведение элементов массива с парными номерами в С++
Заменить второе число нулем, если оно больше первого и вывести результат на экран C++
Написать программу, которая вводит с клавиатуры два числа, заменяет второе число нулем, если оно больше первого и выводит результат на экран.
C++ Определение четности числа http://www.cyberforum.ru/cpp-beginners/thread80702.html
Написать программу, которая вводит с клавиатуры число x и выводит сообщение, является ли число четным или нечетным.
C++ Вычислить выражение max(x+y+z, x*y*z)+3 Написать программу, которая вводит с клавиатуры три числа x, y, z и вычисляет max(x+y+z, x*y*z)+3 при помощи операции, условие. На экран должны быть выведены исходные числа и результат вычислений. подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
02.01.2010, 05:03     Вывести слова в порядке убывания количества символов
Мы простых путей не ищем!
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SEP_CHARS " \t,.:;!?"
    
typedef struct tagWRD {
    char *word;
    size_t len;
    struct tagWRD *next;
} WRD;
 
WRD *maxWord(WRD *w){
    size_t max;
    WRD *pmax;
    
    max = w->len;
    pmax = w;
    while ( w = w->next ){
        if ( w->len > max ){
            max = w->len;
            pmax = w;
        }
    }
    return pmax;
}
 
void swapWords(WRD *a, WRD *b){
    WRD t;
    t.word = a->word;
    t.len = a->len;
    a->word = b->word;
    a->len = b->len;
    b->word = t.word;
    b->len = t.len;
}
 
void sortWords(WRD *w){
    WRD *max_word, *next_word;
    
    if ( !w )
        return;
    while ( next_word = w->next ){
        if ( ( max_word = maxWord(w) ) != w )
            swapWords(w, max_word);
        w = next_word;
    }
}
 
WRD *newWord(char *s){
    WRD *w;
    
    if ( !s )
        return NULL;
    if ( ( w = (WRD*)malloc(sizeof(WRD)) ) == NULL ){
        fprintf(stderr, "Bad memory!\n");
        exit(1);
    }
    if ( ( w->word = strdup(s) ) == NULL ){
        fprintf(stderr, "Bad memory!\n");
        exit(1);
    }
    w->len = strlen(w->word);
    w->next = NULL;
    return w;
}
 
void clearWords(WRD *w){
    WRD *t;
    
    while ( w ){
        t = w->next;
        if ( w->word ){
            free(w->word);
            w->word = NULL;
        }
        free(w);
        w = t;
    }
}
 
void printWords(WRD *w){
    while ( w ){
        printf( ( w->next ) ? "%s " : "%s\n", w->word);
        w = w->next;
    }
}
 
int main(void){
    char buf[BUFSIZ], *p;
    WRD *first, *w, *last;
    
    while ( 1 ){
        first = last = NULL;
        printf("String: ");
        if ( !fgets(buf, sizeof(buf), stdin) )
            exit(1);
        if ( p = strrchr(buf, '\n') )
            *p = 0;
        if ( !*buf )
            exit(0);
        for ( p = strtok(buf, SEP_CHARS); p != NULL; p = strtok(NULL, SEP_CHARS) ){
            if ( ( w = newWord(p) ) == NULL ){
                fprintf(stderr, "Can't get word!\n");
                exit(1);
            }
            if ( !first ){
                first = w;
                last = first;
            }
            else {
                last->next = w;
                last = last->next;
            }
        }
        if ( !first ){
            fprintf(stderr, "Can't get some words!\n");
            exit(1);
        }
        sortWords(first);
        printWords(first);
        clearWords(first);
    }
    exit(0);
}
 
Текущее время: 06:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru