-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
1

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

22.12.2010, 20:13. Показов 3443. Ответов 16
Метки нет (Все метки)

Пожалуйста, напишите программу по следующей задаче:

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

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



Желательно под старый борланд, но там как выйдет.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2010, 20:13
Ответы с готовыми решениями:

Напечатать в алфавитном порядке все слова из данной строки, имеющие заданную длину n
Всем доброго времени помогите пожалуйста выполнить задние через тип String и Класс StringBuilder:...

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

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

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

16
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
22.12.2010, 21:10 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
2
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
22.12.2010, 23:00  [ТС] 3
Спасибо ! Ты мозг! Если можно пару комментов поставь возле функций и будет супер!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
22.12.2010, 23:12 4
Цитата Сообщение от M@ker Посмотреть сообщение
Если можно пару комментов поставь возле функций и будет супер!
А там всего две функции: одна asc_cmp() - по сути обёртка для strcmp(), которая в qsort() передаётся. А вторая - main(), в которой вся возня и происходит. А так все функции стандартные. По сути: читается строка и необходимое количество символов. Строка делится на слова. Если слово нужной длинны, оно добавляется в динамически расширяемый массив. Массив сортируется и выводится. Последним пунктом освобождается выделенная память.
1
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:06  [ТС] 5
Еще проблемка, нужно перевести все в верхний регистр после ввода фамилий , если не трудно напиши или подскажи как, я пробовал , но что-то не работает.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
23.12.2010, 00:16 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;
}
а вот для русских самому писать прийдётся... Ну или по форуму поищите. Точно знаю, что есть (сам писал когда-то)...
0
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:27  [ТС] 7
спасибо, только вот не могу понять сколько не делаю как описать эту функцию и куда вставлять. Вот для это проги вместо S вставить words нужно или как?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
23.12.2010, 00:42 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;
}
1
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:49  [ТС] 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();
 }
Нужно добавить сюда работу с адресной арифметикой и скажи будет ли это считаться задачей на строки, так как она очень простая.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
23.12.2010, 01:02 10
Цитата Сообщение от M@ker Посмотреть сообщение
Нужно добавить сюда работу с адресной арифметикой и скажи будет ли это считаться задачей на строки, так как она очень простая.
Без понятия, куда тут адресную арифметику приделать, да и со строками тут работы никакой... Просто всё, проще некуда...
0
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 01:06  [ТС] 11
А если функцию подключить поиска 2-х последних вхождений. Мне вроде говорили есть такое.
0
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 01:27 12
Цитата Сообщение от easybudda Посмотреть сообщение
Если слово нужной длинны, оно добавляется в динамически расширяемый массив.
У меня вопрос!
А так делать в подобных задачах допустимо?
Затраты же на перемещение массива в случае невозможности расширения, могут быть большими?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
23.12.2010, 01:48 13
Цитата Сообщение от knkd Посмотреть сообщение
А так делать в подобных задачах допустимо?
Если это не контроллер для сердечного имплонтанта, то вполне можно... "Быстрый" вариант получится, если резервировать в стеке место под массив определённой длинны, но тогда появляется ограничение на количество слов. В любом случае мудрить супер-быстрый мега-компактный код по-моему есть смысл только в критичных к скорости/объёму памяти программах. Если никаких особых требований нет, чем проще - тем надёжнее...
0
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 01:50 14
Цитата Сообщение от easybudda Посмотреть сообщение
В любом случае мудрить супер-быстрый мега-компактный код по-моему есть смысл только в критичных к скорости/объёму памяти программах. Если никаких особых требований нет, чем проще - тем надёжнее..
Спасибо, понятно.
Ведь вектор в С++ действует по сути аналогично?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
23.12.2010, 02:22 15
Цитата Сообщение от knkd Посмотреть сообщение
Ведь вектор в С++ действует по сути аналогично?
Не, вектор как-раз сразу резервирует место под несколько объектов хранящегося в нём типа данных. Если места не хватает, объём зарезервированной памяти увеличивается. http://www.cplusplus.com/refer... /capacity/
0
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 02:27 16
Цитата Сообщение от easybudda Посмотреть сообщение
Не, вектор как-раз сразу резервирует место под несколько объектов хранящегося в нём типа данных.
Не, это я понимаю. Я про то что он перемещает данные полностью если они уже не вмещаются.
Ваш же алгоритм по сути не изменится если выделять память не для каждого элемента, а с некоторым запасом на несколько элементов.
Тогда если ткскть инкапсулировать эту операцию с помощью одной структуры и одной функции, то получится практически вектор.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
23.12.2010, 02:38 17
Цитата Сообщение от knkd Посмотреть сообщение
Ваш же алгоритм по сути не изменится если выделять память не для каждого элемента, а с некоторым запасом на несколько элементов.
Тогда если ткскть инкапсулировать эту операцию с помощью одной структуры и одной функции, то получится практически вектор.
Ну можно и так сказать, только код значительно усложнится...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2010, 02:38
Помогаю со студенческими работами здесь

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

Переписать в алфавитном порядке все слова из заданного файла, имеющие длину n, в другой файл.
Разобрать программу &quot;Сортировка по алфавиту&quot;.Дан текстовый файл. Переписать в алфавитном порядке...

Строки. Напечатать все слова, имеющие длину от 5 до 10 символов.
Помогите решить на TP. Напечатать все слова, имеющие длину от 5 до 10 символов. P.S. Не...

Создать массив слов строки и напечатать все слова, имеющие длину менее 3-х символов
Нуждаюсь в решении следующей задачи на Pascal: Дана строка S, которая содержит слова,...

Строки: выбрать все слова, имеющие нечетную длину, вывести их на экран в обратном порядке
Строка содержит несколько слов, между соседними словами не менее одного пробела, за последним...

Строки. Выбрать все слова, имеющие нечетную длину, вывести их на экран в обратном порядке.
Строка содержит несколько слов, между соседними словами не менее одного пробела, за последним...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru