0 / 0 / 0
Регистрация: 01.05.2017
Сообщений: 6
1

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

01.05.2017, 22:30. Показов 2336. Ответов 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
43
#include <stdio.h> 
#include <malloc.h> 
 
int main() { 
char *user_input = malloc(sizeof(char)); 
char *output = malloc(sizeof(char)); 
int i = 0; 
int d = 0; 
int flag = 1; 
while (1) { 
scanf("%c", &user_input[i]); 
if (user_input[i] == '.') {user_input[i]='\0';break;} 
for (int j = 0; j < i; i++) { 
if (user_input[i] == output[j]) { 
flag = 0; 
break; 
} 
} 
if (flag) { 
output[d] = user_input[i]; 
d++; 
output =(char*) realloc(output, (d + 2) * sizeof(char)); 
} 
flag = 1; 
i++; 
user_input = (char*)realloc(user_input, (i + 1) * sizeof(char)); 
} 
printf("input %s",user_input); 
printf("output %s",output); 
char x; 
for (int m = 0; m < d; m++) { 
for (int j = d - 1; j > m; j--) { 
if (output[j - 1] > output[j]) { 
x = output[j - 1]; 
output[j - 1] = output[j]; 
output[j] = x; 
} 
} 
} 
output[d + 1] = '\0'; 
printf("%s", output); 
return 0; 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2017, 22:30
Ответы с готовыми решениями:

В алфавитном порядке порядке напечатать (по одному разу) все строчные русские буквы, входящие в заданный текст
С ( Си ) Вводится текст, за которым следует точка. В алфавитном порядке порядке напечатать ( по...

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

Напечатать в алфавитном порядке все различные строчные русские буквы, входящие в заданный текст из 200 литер.
Напечатать в алфавитном порядке все различные строчные русские буквы, входящие в заданный текст из...

Напечатать текст, подчеркивая все заглавные и строчные русские буквы, входящие в него
Дан текст из 60 букв. Напечатать этот текст, подчеркивая (ставя минусы в соответствующих позициях...

4
1 / 1 / 1
Регистрация: 18.09.2016
Сообщений: 15
02.05.2017, 09:06 2
Перед malloc так же нужно приведение типа, как и перед realloc, так же в одной из строчек опечатка (xrealloc вместо realloc). После этого у меня код скомпилировался...
Тоже на опечатку похожее... В цикле for внутри while Вы увеличиваете i вместо j.

Вот Ваш код с исправлениями.

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
#include <stdio.h> 
#include <malloc.h> 
 
int main() { 
    char *user_input = (char*)malloc(0*sizeof(char)); 
    char *output = (char*)malloc(0*sizeof(char)); 
    int i = 0; 
    int d = 0; 
    int flag = 1; 
    while (1) { 
        scanf("%c", &user_input[i]); 
        if (user_input[i] == '.') {user_input[i]='\0';break;} 
        for (int j = 0; j < i; j++) { 
            if (user_input[i] == output[j]) { 
                flag = 0; 
                break; 
            } 
        } 
        if (flag) { 
            output[d] = user_input[i]; 
            d++; 
            output =(char*)realloc(output, (d + 2) * sizeof(char)); 
        } 
        flag = 1; 
        i++; 
        user_input = (char*)realloc(user_input, (i + 1) * sizeof(char)); 
    } 
    printf("input %s",user_input); 
    printf("output %s",output); 
    char x; 
    for (int m = 0; m < d; m++) { 
        for (int j = d - 1; j > m; j--) { 
            if (output[j - 1] > output[j]) { 
                x = output[j - 1]; 
                output[j - 1] = output[j]; 
                output[j] = x; 
            } 
        } 
    } 
    output[d + 1] = '\0'; 
    printf("%s", output); 
    return 0; 
}
Подумайте еще о том, что бы вывод оформить по-лучше
1
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
02.05.2017, 16:03 3
Лучший ответ Сообщение было отмечено Green_Dino как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define N 33
void AtLeastOnce(char* );
int main()
{
    char buf[BUFSIZ];
    setlocale(LC_ALL, "Russian");
    system("chcp 1251 > nul");
    puts("Введите строку: ");
    fgets(buf, BUFSIZ, stdin);
    AtLeastOnce(buf);
}
void AtLeastOnce(char* p)
{
    int AzBuki[N] = {}, i;
    while(*p){
        if(*p >= 'а' && *p <= 'я'){
            AzBuki[*p - 'а']++;
        }
        p++;
    }
    for(i = 0; i < N; i++){
        if(AzBuki[i] > 0)
            printf("%c ", i + 'а');
    }
}
только букву ё почему-то игнорит...
1
0 / 0 / 0
Регистрация: 01.05.2017
Сообщений: 6
04.05.2017, 23:04  [ТС] 4
LFC, буду очень благодарна, если объяснишь программу по каждой строке. Я только начинаю изучать си и мне это просто необходимо)
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
05.05.2017, 04:48 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void AtLeastOnce(char* p)
{
    int AzBuki[N] = {}, i;//объявляем массив размером 33(по количеству букв в русском алфавите) и устанавливаем 
                                   //каждый элемент в ноль
    while(*p){//циклом проходим по строке
        if(*p >= 'а' && *p <= 'я'){//если элемент буква,то
            AzBuki[*p - 'а']++;//увеличиваем значение соответствующего элемента в "азбуке" на 1(индекс элемента в 
        }                            //"азбуке" соответствует номеру буквы в алфавите)
        p++;
    }
    for(i = 0; i < N; i++){
        if(AzBuki[i] > 0)//выводим на экран индексы элементов "азбуки" большие нуля
            printf("%c ", i + 'а');
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2017, 04:48
Помогаю со студенческими работами здесь

Напечатать в алфавитном порядке все буквы, входящие в текст
Весь текст находится в txt файле, все данные должны быть обработаны и занесены в алфавитном...

Напечатать строчные русские буквы входящие в текст
Дан текст из 60 литер. Напечатать только строчные русские буквы, входящие в этот текст. (через...

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

Распечатать в порядке, обратном алфавитному, все буквы, входящие в текст не менее трех раз
только начал разбирать работу со строками в языке си)не могу организовать програму,помогите...


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

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

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