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

Узнай цену своей работы

Формулировка задачи:

Подскажите ошибку, которую допустила в программе. Задание такое: Вводится текст, за которым следует точка. В алфавитном порядке напечатать (по разу) все строчные русские буквы, входящие в этот текст. (требуется написать программу на языке СИ)
Листинг программы
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. int main() {
  4. char *user_input = malloc(sizeof(char));
  5. char *output = malloc(sizeof(char));
  6. int i = 0;
  7. int d = 0;
  8. int flag = 1;
  9. while (1) {
  10. scanf("%c", &user_input[i]);
  11. if (user_input[i] == '.') {user_input[i]='\0';break;}
  12. for (int j = 0; j < i; i++) {
  13. if (user_input[i] == output[j]) {
  14. flag = 0;
  15. break;
  16. }
  17. }
  18. if (flag) {
  19. output[d] = user_input[i];
  20. d++;
  21. output =(char*) realloc(output, (d + 2) * sizeof(char));
  22. }
  23. flag = 1;
  24. i++;
  25. user_input = (char*)realloc(user_input, (i + 1) * sizeof(char));
  26. }
  27. printf("input %s",user_input);
  28. printf("output %s",output);
  29. char x;
  30. for (int m = 0; m < d; m++) {
  31. for (int j = d - 1; j > m; j--) {
  32. if (output[j - 1] > output[j]) {
  33. x = output[j - 1];
  34. output[j - 1] = output[j];
  35. output[j] = x;
  36. }
  37. }
  38. }
  39. output[d + 1] = '\0';
  40. printf("%s", output);
  41. return 0;
  42. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #define N 33
  5. void AtLeastOnce(char* );
  6. int main()
  7. {
  8.     char buf[BUFSIZ];
  9.     setlocale(LC_ALL, "Russian");
  10.     system("chcp 1251 > nul");
  11.     puts("Введите строку: ");
  12.     fgets(buf, BUFSIZ, stdin);
  13.     AtLeastOnce(buf);
  14. }
  15. void AtLeastOnce(char* p)
  16. {
  17.     int AzBuki[N] = {}, i;
  18.     while(*p){
  19.         if(*p >= 'а' && *p <= 'я'){
  20.             AzBuki[*p - 'а']++;
  21.         }
  22.         p++;
  23.     }
  24.     for(i = 0; i < N; i++){
  25.         if(AzBuki[i] > 0)
  26.             printf("%c ", i + 'а');
  27.     }
  28. }

Объяснение кода листинга программы

В этом коде:

  1. #include , #include , #include - подключают необходимые для работы функции и определения из заголовочных файлов.
  2. #define N 33 - определяют количество различных букв в русском алфавите (не считая буквы 'ё').
  3. *void AtLeastOnce(char );** - объявляют функцию с именем AtLeastOnce, которая принимает указатель на строку символов и не возвращает ничего.
  4. int main() - объявляют основную функцию программы, которая возвращает значение типа int (0 - успешно, 1 - ошибка).
  5. char buf[BUFSIZ]; - создают массив символов (строку) для ввода текста.
  6. setlocale(LC_ALL, Russian); - устанавливают русскую локаль для работы с русским текстом.
  7. system(chcp 1251 > nul); - устанавливают кодировку консоли ввода в 1251 (кириллица).
  8. puts(Введите строку:); - выводят приглашение для ввода строки.
  9. fgets(buf, BUFSIZ, stdin); - считывают строку из консоли ввода в массив buf.
  10. AtLeastOnce(buf); - вызывают функцию AtLeastOnce, передавая ей указатель на введенную строку.
  11. *void AtLeastOnce(char p)** - функция для перебора всех букв в строке и подсчета их количества.
  12. int AzBuki[N] = {}, i; - объявляют массив для подсчета количества букв и переменную для цикла.
  13. *while(p){** - пока не достигнут конец строки.
  14. if(p >= 'а' && p <= 'я'){ - если текущий символ является буквой русского алфавита.
  15. *AzBuki[p - 'а']++;** - увеличивают счетчик для соответствующей буквы в массиве.
  16. p++; - переходят к следующей букве.
  17. for(i = 0; i < N; i++){ - после перебора всех букв, выводят результат.
  18. if(AzBuki[i] > 0) - если количество вхождений данной буквы больше нуля.
  19. printf(%c, i + 'а'); - выводят букву на экран.
  20. } - завершают цикл.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы