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

Из введенного текста распечатать все слова наименьшей длины - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создать класс матрица, перегрузка, ввод-вывод http://www.cyberforum.ru/cpp-beginners/thread111322.html
Будьте кто добр помочь. Нужно сделать так, чтобы можно было вводить и выводить матрицу любого размера. Чтобы не было ограничения (в данном случае 10 на 10). Ввести могу любого размера, а выводит только 10 штук нормально, а остальное мусор. // мчсмчс.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdafx.h" #include <iostream> #include...
C++ Цикл,Строки,Массив Народ,помогите пожалуйста выполнить лабы по программированию =) 3 лабы и в каждой по три задачи(кроме одномерных массивов) определенного типа: Цикл,Строки,Одномерный массив. Цикл: http://s51.***********/i131/1003/dd/4f7c28855be7.png Строковой тип: 1.Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу. 2.Дана строка символов.... http://www.cyberforum.ru/cpp-beginners/thread111320.html
Даны две строки s1 и s2. Пусть w – первое из слов строки s1, которое есть и в строке s2. Найти слово, предшествующее первому вхождению w в s1. C++
подскажите пожалуйста!! Даны две строки s1 и s2. Пусть w – первое из слов строки s1, которое есть и в строке s2. Найти слово, предшествующее первому вхождению w в s1.
шифрование, взломаем файл(?)=)) C++
Здрасьте, здрасьте)) Есть программка на Паскальчике... А как бы ее переделать на Си? Проблеммка... Помогите)) А еще как дописать в программку на Си запись и чтение в файлик? Итак, вот код: const TPolibius: array of char = ( ('A', 'B', 'C', 'D', 'E'), ('F', 'G', 'H', 'I', 'K'), ('L', 'M', 'N', 'O', 'P'), ('Q', 'R', 'S', 'T', 'U'),
C++ для работы с двумерными массивами арифметических типов разработать шаблоны ввода-вывода и для смены столбцов по правилу:1 с поледним,2 с предпосл.и тд http://www.cyberforum.ru/cpp-beginners/thread111290.html
#include <iostream> using namespace std; template <typename X> void printArray(char *name, X*a, int n) {cout<<name; for (int i=0; i<n; i++) for (int j=0; j<n; j++) cout<<a<<"\t"; cout<<endl;} вроде должно быть так для ввода вывода...???):-[
C++ Перестановка елементов масива Уважаемые форумчане помогите решить эту сложную задачу: Действительные векторы заданы X(x1,x2,..,x50) и Y(y1,y2,..,y50) превратить по правилу: большую за компонент xi и yi считать новым значением xi, меньшую - считать новым значением yi. Как это зделать даже незнаю помогите написать задачу. подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.04.2010, 01:44     Из введенного текста распечатать все слова наименьшей длины
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
/* Shortest Word */
typedef struct tagSWRD {
    char *wrd;
    size_t meet;
    struct tagSWRD *next;
} SWRD;
 
/* возвращает указатель на новую структуру */
SWRD * newSwrd(const char *wrd, SWRD *last){
    SWRD *sw;
    
    if ( ( sw = (SWRD*)malloc(sizeof(SWRD)) ) == NULL )
        return NULL;
    if ( ( sw->wrd = strdup(wrd) ) == NULL )
        return NULL;
    sw->meet = 1;
    sw->next = NULL;
    
    if ( last )
        last->next = sw;
    
    return sw;
}
 
/* ищет слово в списке структур */
SWRD * findWord(const char *wrd, SWRD *sw){
    while ( sw ){
        if ( !strcmp(wrd, sw->wrd) )
            break;
        sw = sw->next;
    }
    return sw;
}
 
/* очищает список структур */
void clearSwrd(SWRD *sw){
    SWRD *tmp;
    
    while ( sw ){
        tmp = sw->next;
        if ( sw->wrd )
            free(sw->wrd);
        free(sw);
        sw = tmp;
    }
} 
 
#define MAX_LEN 1024
#define SPCHARS " \t\n"
 
int main(void){
    char buf[MAX_LEN], *pWrd, **words;
    size_t len, min_len, words_count, swrd_count, i;
    SWRD *first, *last, *found;
    
    /* установка начальных значений */
    words_count = 0;
    swrd_count = 0;
    min_len = MAX_LEN;
    first = last = NULL;
    
    /* чтение строки из ввода */
    printf("Enter some space separated words:\n");
    if ( !fgets(buf, MAX_LEN, stdin) || *buf == '\n' ){
        fprintf(stderr, "Input error!\n");
        exit(1);
    }
    
    /* разбиение строки на массив слов. попутно вычисление длинны самого короткого слова */
    for ( pWrd = strtok(buf, SPCHARS); pWrd != NULL; pWrd = strtok(NULL, SPCHARS) ){
        if ( ( words = (char**)realloc(words, (words_count + 1) * sizeof(char*)) ) == NULL ){
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
        if ( ( words[words_count++] = strdup(pWrd) ) == NULL ){
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
        if ( ( len = strlen(pWrd) ) < min_len )
            min_len = len;
    }
    
    /* поиск и составление списка самых коротких слов */
    for ( i = 0; i < words_count; ++i ){
        if ( strlen(words[i]) == min_len ){
            ++swrd_count;
            if ( !first ){
                if ( ( first = newSwrd(words[i], NULL) ) == NULL ){
                    fprintf(stderr, "Memory error!\n");
                    exit(1);
                }
                last = first;
            }
            else if ( found = findWord(words[i], first) )
                found->meet += 1;
            else {
                if ( ( last = newSwrd(words[i], last) ) == NULL ){
                    fprintf(stderr, "Memory error!\n");
                    exit(1);
                }
            }
        }
    }
    
    /* вывод результатов поиска */
    printf("Found %d shortest words:\nWord                Meet\n", swrd_count);
    for ( found = first; found != NULL; found = found->next )
        printf("%-20s%d\n", found->wrd, found->meet);
    
    /* очистка памяти */
    for ( i = 0; i < words_count; ++i )
        free(words[i]);
    free(words);
    clearSwrd(first);
    
    exit(0);
}
 
Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru