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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
zRemix
1 / 1 / 0
Регистрация: 29.01.2010
Сообщений: 20
31.03.2010, 23:27     Из введенного текста распечатать все слова наименьшей длины #1
Нужна помощь с задачкой...
надо решить на простом Си...
вот собственно она:

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

буду очень благодарен кто поможет...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2010, 23:27     Из введенного текста распечатать все слова наименьшей длины
Посмотрите здесь:

C++ Распечатать все слова нечетной длины, начинающиеся и оканчивающиеся на букву Т
Ввести строку произвольной длины.Распечатать все '*' в ней с порядковыми номерами C++
C++ С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву в начало слова;
Из текста удалить все слова заданной длины,начинающиеся с согласных букв C++
Дана строка, вывести слова наименьшей длины в порядке возрастания C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.04.2010, 01:44     Из введенного текста распечатать все слова наименьшей длины #2
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);
}
Robinzo_ON
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 11
03.05.2011, 19:12     Из введенного текста распечатать все слова наименьшей длины #3
На C# может кто перевести такую?
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.05.2011, 20:10     Из введенного текста распечатать все слова наименьшей длины #4
На С++, если кому надо:
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
#include <iostream>
#include <string>
 
void Printing_Short_Word (std::string Str)
{
    std::string S = Str + " ";
    short int MinLength = S.length();
    std::string Word;
 
    /*
     *Находим длину самого короткого слова
     */
    while (!S.empty())
    {
        Word.append(S, 0, S.find(" "));
        if (Word.length() < MinLength)
            MinLength = Word.length();
        S.erase(0, S.find(" ") + 1);
        Word.clear();
    }
    /*
     * Печатаем слова с наименьшей длиной
     */
    S = Str + " ";
    while (!S.empty())
    {
        Word.append(S, 0, S.find(" "));
        if (Word.length() == MinLength)
            std::cout << Word << std::endl;
        S.erase(0, S.find(" ") + 1);
        Word.clear();
    }
}
 
int main()
{
    std::string MainString;
    std::getline(std::cin, MainString);
    Printing_Short_Word (MainString);
    std::cin.get();
    return 0;
}
Robinzo_ON
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 11
03.05.2011, 20:45     Из введенного текста распечатать все слова наименьшей длины #5
Что Си, что С++, мне непонятно всё равно))) C# сейчас нам внедрили, а я ток на первом курсе учусь, мне сложновато это. Притом что я раньше вообще не прогал
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.05.2011, 22:05     Из введенного текста распечатать все слова наименьшей длины #6
Robinzo_ON, читай литературу по С#!
Robinzo_ON
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 11
04.05.2011, 11:10     Из введенного текста распечатать все слова наименьшей длины #7
Читал я уже. Нет в книгах нормальных и понятных примеров задач такого типа. только самое простейшее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 11:38     Из введенного текста распечатать все слова наименьшей длины
Еще ссылки по теме:

Функция выводит на экран все слова заданной длины. Длина слова является параметром функции C++
C++ Выбрать из текста все слова одинаковой длины
C++ Вывести последнее слово текста наименьшей длины

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.05.2011, 11:38     Из введенного текста распечатать все слова наименьшей длины #8
Robinzo_ON, создай топик в разделе С#. Дальнейшие рассуждения на эту тему будут приравнены к офтопу!
Yandex
Объявления
04.05.2011, 11:38     Из введенного текста распечатать все слова наименьшей длины
Ответ Создать тему
Опции темы

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