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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
zRemix
1 / 1 / 0
Регистрация: 29.01.2010
Сообщений: 20
#1

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

31.03.2010, 23:27. Просмотров 1359. Ответов 7
Метки нет (Все метки)

Нужна помощь с задачкой...
надо решить на простом Си...
вот собственно она:

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

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

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

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

Определить слова наибольшей и наименьшей длины и величину длины. - C++
Дано предложение (символьная строка, где слова отделяются друг от друга запятой). Определить слова наибольшей и наименьшей длины и...

Выбрать из текста все слова одинаковой длины - C++
С текста выбрать все слова одинаковой длины

Из текста удалить все слова заданной длины,начинающиеся с согласных букв - C++
Из текста удалить все слова заданной длины,начинающиеся с согласных букв нужна программа в Visual Studio.

Вывести последнее слово текста наименьшей длины - C++
Дан текстовый файл. Вывести последнее слово текста наименьшей длины. Словом считать набор символов, не содержащий пробелов и ограниченный...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9532 / 5525 / 932
Регистрация: 25.07.2009
Сообщений: 10,611
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ил
533 / 438 / 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ил
533 / 438 / 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
Читал я уже. Нет в книгах нормальных и понятных примеров задач такого типа. только самое простейшее.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
04.05.2011, 11:38 #8
Robinzo_ON, создай топик в разделе С#. Дальнейшие рассуждения на эту тему будут приравнены к офтопу!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 11:38
Привет! Вот еще темы с ответами:

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

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

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

С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву в начало слова; - C++
С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву...


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

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

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