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

Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
22.12.2010, 20:13     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #1
Пожалуйста, напишите программу по следующей задаче:

Дана строка . Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n.

В долгу не останусь!!



Желательно под старый борланд, но там как выйдет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2010, 20:13     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n
Посмотрите здесь:

Напечатать все слова в алфавитном порядке C++
C++ Для строки объединить в отдельную строку все слова, имеющие заданную букву, разделив их одним пробелом
C++ В тексте слова разделены запятыми,напечатать все слова в алфавитном порядке.
C++ Класс String. Напечатать все слова, входящие в эту текстовую строку, имеющие такую же длину как и заданное слово
C++ Напечатать слова из заданной строки, имеющие больше одной буквы «е»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.12.2010, 21:10     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int asc_cmp(const void * a, const void * b){
    return strcmp(*(char**)a, *(char**)b);
}
 
#define DELIM " \t\n"
 
int main(void){
    char buf[BUFSIZ], *p, ** words;
    int i, cnt, len;
    
    printf("String: ");
    scanf("%[^\n]", buf);
    printf("Length: ");
    scanf("%d", &len);
    
    words = NULL;
    cnt = 0;
    for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) ){
        if ( strlen(p) == len ){
            if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL ){
                perror("realloc");
                exit(1);
            }
            if ( ( words[cnt++] = strdup(p) ) == NULL ){
                perror("strdup");
                exit(1);
            }
        }
    }
    if ( ! words || ! cnt ){
        fprintf(stderr, "No needed words found!\n");
        exit(1);
    }
    qsort(words, cnt, sizeof(char*), asc_cmp);
    printf("Result: ");
    for ( i = 0; i < cnt; ++i )
        printf("%s ", words[i]);
    printf("\n");
    
    for ( i = 0; i < cnt; ++i )
        free(words[i]);
    free(words);
    
    return 0;
}
Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
22.12.2010, 23:00  [ТС]     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #3
Спасибо ! Ты мозг! Если можно пару комментов поставь возле функций и будет супер!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
22.12.2010, 23:12     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #4
Цитата Сообщение от M@ker Посмотреть сообщение
Если можно пару комментов поставь возле функций и будет супер!
А там всего две функции: одна asc_cmp() - по сути обёртка для strcmp(), которая в qsort() передаётся. А вторая - main(), в которой вся возня и происходит. А так все функции стандартные. По сути: читается строка и необходимое количество символов. Строка делится на слова. Если слово нужной длинны, оно добавляется в динамически расширяемый массив. Массив сортируется и выводится. Последним пунктом освобождается выделенная память.
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:06  [ТС]     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #5
Еще проблемка, нужно перевести все в верхний регистр после ввода фамилий , если не трудно напиши или подскажи как, я пробовал , но что-то не работает.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.12.2010, 00:16     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #6
ну с английскими буквами не проблема
C
1
2
3
4
5
6
7
8
#include <ctype.h>
 
char * str_to_upper(char * str){
  char * s;
  for ( s = str; *s; ++s )
    *s = toupper(*s);
  return str;
}
а вот для русских самому писать прийдётся... Ну или по форуму поищите. Точно знаю, что есть (сам писал когда-то)...
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:27  [ТС]     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #7
спасибо, только вот не могу понять сколько не делаю как описать эту функцию и куда вставлять. Вот для это проги вместо S вставить words нужно или как?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.12.2010, 00:42     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #8
Цитата Сообщение от M@ker Посмотреть сообщение
как описать эту функцию и куда вставлять.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
char * str_to_upper(char * str){
  char * s;
  for ( s = str; *s; ++s )
    *s = toupper(*s);
  return str;
}
 
int asc_cmp(const void * a, const void * b){
    return strcmp(*(char**)a, *(char**)b);
}
 
#define DELIM " \t\n"
 
int main(void){
    char buf[BUFSIZ], *p, ** words;
    int i, cnt, len;
    
    printf("String: ");
    scanf("%[^\n]", buf);
    printf("Length: ");
    scanf("%d", &len);
    
    words = NULL;
    cnt = 0;
    for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) ){
        if ( strlen(p) == len ){
            if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL ){
                perror("realloc");
                exit(1);
            }
            if ( ( words[cnt] = strdup(p) ) == NULL ){
                perror("strdup");
                exit(1);
            }
            str_to_upper(words[cnt]);
            ++cnt;
        }
    }
    if ( ! words || ! cnt ){
        fprintf(stderr, "No needed words found!\n");
        exit(1);
    }
    qsort(words, cnt, sizeof(char*), asc_cmp);
    printf("Result: ");
    for ( i = 0; i < cnt; ++i )
        printf("%s ", words[i]);
    printf("\n");
    
    for ( i = 0; i < cnt; ++i )
        free(words[i]);
    free(words);
    
    return 0;
}
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:49  [ТС]     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #9
СПАСИБО ОГРОМНОЕ! Я наверное тебя достал уже, на сегодня последний вопрос, просто помочь мне некому , кроме вашего форума.

Вот есть такая программа (тоже работа со строками, но как мне сказали их вообще здесь нет смысла применять, хотя я не уверен) :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <locale.h>
void main()
 {
 
textbackground(WHITE);
textcolor (BLACK);
 
 
clrscr();
int x;
printf("Enter kop:");
scanf("%i",&x);
 
printf("\n");
 
printf("%dgrn. %dkop.",x/100,x%100);
 
getch();
 }
Нужно добавить сюда работу с адресной арифметикой и скажи будет ли это считаться задачей на строки, так как она очень простая.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.12.2010, 01:02     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #10
Цитата Сообщение от M@ker Посмотреть сообщение
Нужно добавить сюда работу с адресной арифметикой и скажи будет ли это считаться задачей на строки, так как она очень простая.
Без понятия, куда тут адресную арифметику приделать, да и со строками тут работы никакой... Просто всё, проще некуда...
M@ker
-73 / 19 / 1
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 01:06  [ТС]     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #11
А если функцию подключить поиска 2-х последних вхождений. Мне вроде говорили есть такое.
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 01:27     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #12
Цитата Сообщение от easybudda Посмотреть сообщение
Если слово нужной длинны, оно добавляется в динамически расширяемый массив.
У меня вопрос!
А так делать в подобных задачах допустимо?
Затраты же на перемещение массива в случае невозможности расширения, могут быть большими?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.12.2010, 01:48     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #13
Цитата Сообщение от knkd Посмотреть сообщение
А так делать в подобных задачах допустимо?
Если это не контроллер для сердечного имплонтанта, то вполне можно... "Быстрый" вариант получится, если резервировать в стеке место под массив определённой длинны, но тогда появляется ограничение на количество слов. В любом случае мудрить супер-быстрый мега-компактный код по-моему есть смысл только в критичных к скорости/объёму памяти программах. Если никаких особых требований нет, чем проще - тем надёжнее...
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 01:50     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #14
Цитата Сообщение от easybudda Посмотреть сообщение
В любом случае мудрить супер-быстрый мега-компактный код по-моему есть смысл только в критичных к скорости/объёму памяти программах. Если никаких особых требований нет, чем проще - тем надёжнее..
Спасибо, понятно.
Ведь вектор в С++ действует по сути аналогично?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.12.2010, 02:22     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #15
Цитата Сообщение от knkd Посмотреть сообщение
Ведь вектор в С++ действует по сути аналогично?
Не, вектор как-раз сразу резервирует место под несколько объектов хранящегося в нём типа данных. Если места не хватает, объём зарезервированной памяти увеличивается. http://www.cplusplus.com/reference/stl/vector/capacity/
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 02:27     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #16
Цитата Сообщение от easybudda Посмотреть сообщение
Не, вектор как-раз сразу резервирует место под несколько объектов хранящегося в нём типа данных.
Не, это я понимаю. Я про то что он перемещает данные полностью если они уже не вмещаются.
Ваш же алгоритм по сути не изменится если выделять память не для каждого элемента, а с некоторым запасом на несколько элементов.
Тогда если ткскть инкапсулировать эту операцию с помощью одной структуры и одной функции, то получится практически вектор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2010, 02:38     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n
Еще ссылки по теме:

Напечатать все символы строки в алфавитном порядке C++
C++ Написать функцию, выводящую на печать слова из заданной строки в алфавитном порядке
Все слова строки, которые начинаются с данной буквы, отсортировать в алфавитном порядке C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.12.2010, 02:38     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n #17
Цитата Сообщение от knkd Посмотреть сообщение
Ваш же алгоритм по сути не изменится если выделять память не для каждого элемента, а с некоторым запасом на несколько элементов.
Тогда если ткскть инкапсулировать эту операцию с помощью одной структуры и одной функции, то получится практически вектор.
Ну можно и так сказать, только код значительно усложнится...
Yandex
Объявления
23.12.2010, 02:38     Напечатать в алфавитном порядке все слова из заданной строки, имеющие заданную длину n
Ответ Создать тему
Опции темы

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