Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355

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

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

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

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

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



Желательно под старый борланд, но там как выйдет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2010, 20:13
Ответы с готовыми решениями:

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

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

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

16
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
22.12.2010, 21:10
диржы задаром
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;
}
2
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
22.12.2010, 23:00  [ТС]
Спасибо ! Ты мозг! Если можно пару комментов поставь возле функций и будет супер!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
22.12.2010, 23:12
Цитата Сообщение от M@ker Посмотреть сообщение
Если можно пару комментов поставь возле функций и будет супер!
А там всего две функции: одна asc_cmp() - по сути обёртка для strcmp(), которая в qsort() передаётся. А вторая - main(), в которой вся возня и происходит. А так все функции стандартные. По сути: читается строка и необходимое количество символов. Строка делится на слова. Если слово нужной длинны, оно добавляется в динамически расширяемый массив. Массив сортируется и выводится. Последним пунктом освобождается выделенная память.
1
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 00:06  [ТС]
Еще проблемка, нужно перевести все в верхний регистр после ввода фамилий , если не трудно напиши или подскажи как, я пробовал , но что-то не работает.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.12.2010, 00:16
ну с английскими буквами не проблема
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  [ТС]
спасибо, только вот не могу понять сколько не делаю как описать эту функцию и куда вставлять. Вот для это проги вместо S вставить words нужно или как?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.12.2010, 00:42
Цитата Сообщение от 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  [ТС]
СПАСИБО ОГРОМНОЕ! Я наверное тебя достал уже, на сегодня последний вопрос, просто помочь мне некому , кроме вашего форума.

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

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Эксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.12.2010, 01:02
Цитата Сообщение от M@ker Посмотреть сообщение
Нужно добавить сюда работу с адресной арифметикой и скажи будет ли это считаться задачей на строки, так как она очень простая.
Без понятия, куда тут адресную арифметику приделать, да и со строками тут работы никакой... Просто всё, проще некуда...
0
-12 / 19 / 4
Регистрация: 17.12.2010
Сообщений: 355
23.12.2010, 01:06  [ТС]
А если функцию подключить поиска 2-х последних вхождений. Мне вроде говорили есть такое.
0
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 01:27
Цитата Сообщение от easybudda Посмотреть сообщение
Если слово нужной длинны, оно добавляется в динамически расширяемый массив.
У меня вопрос!
А так делать в подобных задачах допустимо?
Затраты же на перемещение массива в случае невозможности расширения, могут быть большими?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.12.2010, 01:48
Цитата Сообщение от knkd Посмотреть сообщение
А так делать в подобных задачах допустимо?
Если это не контроллер для сердечного имплонтанта, то вполне можно... "Быстрый" вариант получится, если резервировать в стеке место под массив определённой длинны, но тогда появляется ограничение на количество слов. В любом случае мудрить супер-быстрый мега-компактный код по-моему есть смысл только в критичных к скорости/объёму памяти программах. Если никаких особых требований нет, чем проще - тем надёжнее...
0
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 01:50
Цитата Сообщение от easybudda Посмотреть сообщение
В любом случае мудрить супер-быстрый мега-компактный код по-моему есть смысл только в критичных к скорости/объёму памяти программах. Если никаких особых требований нет, чем проще - тем надёжнее..
Спасибо, понятно.
Ведь вектор в С++ действует по сути аналогично?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.12.2010, 02:22
Цитата Сообщение от knkd Посмотреть сообщение
Ведь вектор в С++ действует по сути аналогично?
Не, вектор как-раз сразу резервирует место под несколько объектов хранящегося в нём типа данных. Если места не хватает, объём зарезервированной памяти увеличивается. http://www.cplusplus.com/refer... /capacity/
0
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
23.12.2010, 02:27
Цитата Сообщение от easybudda Посмотреть сообщение
Не, вектор как-раз сразу резервирует место под несколько объектов хранящегося в нём типа данных.
Не, это я понимаю. Я про то что он перемещает данные полностью если они уже не вмещаются.
Ваш же алгоритм по сути не изменится если выделять память не для каждого элемента, а с некоторым запасом на несколько элементов.
Тогда если ткскть инкапсулировать эту операцию с помощью одной структуры и одной функции, то получится практически вектор.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.12.2010, 02:38
Цитата Сообщение от knkd Посмотреть сообщение
Ваш же алгоритм по сути не изменится если выделять память не для каждого элемента, а с некоторым запасом на несколько элементов.
Тогда если ткскть инкапсулировать эту операцию с помощью одной структуры и одной функции, то получится практически вектор.
Ну можно и так сказать, только код значительно усложнится...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2010, 02:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru