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

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

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

Весь текст находится в txt файле, все данные должны быть обработаны и занесены в алфавитном порядке в выходной текст, а так же отобразиться на экране. При этом пользователь должен ввести название входного и выходного файлов. P.S. До этого делал это же задание с немного отличными требованиями в паскале на PascalABC.NET, теперь вот на С первую же программу такую дали
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <ctype.h>
  5. int main(void)
  6. {
  7. int i,j,k,TextSize;
  8. char InPName[15],OutPName[15], Symbol;
  9. FILE *InPutFile,*OutPutFile;
  10. char OurText[100];
  11. setlocale(LC_ALL, "RUSSIAN");
  12. printf("Данная программа отсортирует ваш текст в алфавитном порядке.\n");
  13. printf("Введите имя исходного файла \n");
  14. k = 0;
  15. while (k == 0)
  16. {
  17. scanf("%s", InPName);
  18. if ((InPutFile = fopen(InPName, "r")) == NULL)
  19. {
  20. printf("Ошибка при открытии файла. Повторите ввод\n");
  21. k = 0;
  22. }
  23. else{
  24. k = 1;
  25. }
  26. }
  27. printf("Введите имя файла для результата \n");
  28. scanf("%s", OutPName);
  29. OutPutFile = fopen(OutPName, "w");
  30. fseek(InPutFile, 0, SEEK_SET);
  31. printf("Исходныйтекст: \n \r");
  32. TextSize = 0;
  33. while (!feof(InPutFile))
  34. {
  35. Symbol = getc(InPutFile);
  36. printf("%c", Symbol);
  37. TextSize++;
  38. OurText[TextSize] = toupper(Symbol);
  39. }
  40. fclose(InPutFile);
  41. for (i = 0; i <= TextSize; i++)
  42. {
  43. Symbol = OurText[i];
  44. j = i - 1;
  45. while ((j >= 1) && (OurText[j] > Symbol))
  46. {
  47. OurText[j + 1] = OurText[j];
  48. j --;
  49. }
  50. OurText[j + 1] = Symbol;
  51. }
  52. printf("\n");
  53. printf("Получившийся текст: \n \r");
  54. for (i = 0; i <= TextSize; i++)
  55. {
  56. switch (OurText[i])
  57. {
  58. case 'A' - 'Z' || 'А' - 'Я':
  59. printf("%c", OurText[i]);
  60. putc(OurText[i], OutPutFile);
  61. }
  62. }
  63. fclose(OutPutFile);
  64. system("pause");
  65. return 0;
  66. }
Может кто объяснить, почему switch не хочет пропускать символы? Без него все работает, но выводит в добавок и те символы, которые мне не нужны. К тому же в конце текста откуда-то появляется буква "я".

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

textual
Листинг программы
  1. switch (OurText[i])
  2.         {
  3.         case 'A' - 'Z' || 'А' - 'Я':
  4.             printf("%c", OurText[i]);
  5.             putc(OurText[i], OutPutFile);
  6.         }

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

В представленном коде выполняется следующая последовательность действий:

  1. В зависимости от значения переменной OurText[i] выполняется одно из действий:
    • Если значение OurText[i] входит в диапазон от 'A' до 'Z' (включительно) или от 'А' до 'Я' (включительно), то выполняется блок кода внутри соответствующего случая (label) в структуре switch.
    • Если значение OurText[i] не входит в указанные диапазоны, то выполняется ничего.
  2. Внутри блока кода для случая, когда значение OurText[i] входит в диапазон от 'A' до 'Z' или от 'А' до 'Я', выполняется следующая последовательность действий:
    • Значение OurText[i] преобразуется в символ и выводится на экран с помощью функции printf().
    • Значение OurText[i] также записывается в файл OutPutFile с помощью функции putc(). Список действий в коде:
  3. Преобразование значения OurText[i] в символ.
  4. Проверка значения OurText[i] на вхождение в диапазон от 'A' до 'Z' или от 'А' до 'Я'.
  5. Вывод символа на экран с помощью функции printf().
  6. Запись символа в файл OutPutFile с помощью функции putc().

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


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

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

15   голосов , оценка 3.667 из 5

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

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

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