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

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

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

Весь текст находится в txt файле, все данные должны быть обработаны и занесены в алфавитном порядке в выходной текст, а так же отобразиться на экране. При этом пользователь должен ввести название входного и выходного файлов. P.S. До этого делал это же задание с немного отличными требованиями в паскале на PascalABC.NET, теперь вот на С первую же программу такую дали
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <ctype.h>
 
int main(void)
{
    int i,j,k,TextSize;
    char InPName[15],OutPName[15], Symbol;
    FILE *InPutFile,*OutPutFile;
    char OurText[100];
 
    setlocale(LC_ALL, "RUSSIAN");
    printf("Данная программа отсортирует ваш текст в алфавитном порядке.\n");
    printf("Введите имя исходного файла \n");
    k = 0;
    while (k == 0)
    {
        scanf("%s", InPName);
 
        if ((InPutFile = fopen(InPName, "r")) == NULL)
        {
            printf("Ошибка при открытии файла. Повторите ввод\n");
            k = 0;
        }
        else{
            k = 1;
        }
    }
    printf("Введите имя файла для результата \n");
    scanf("%s", OutPName);
    OutPutFile = fopen(OutPName, "w");
    fseek(InPutFile, 0, SEEK_SET);
    printf("Исходныйтекст: \n \r");
    TextSize = 0;
    while (!feof(InPutFile))
    {   
        Symbol = getc(InPutFile);
        printf("%c", Symbol);
        TextSize++;
        OurText[TextSize] = toupper(Symbol);
    }
 
    fclose(InPutFile);
    for (i = 0; i <= TextSize; i++)
    {
        Symbol = OurText[i];
        j = i - 1;
        while ((j >= 1) && (OurText[j] > Symbol))
        {
            OurText[j + 1] = OurText[j];
            j --;
        }
        OurText[j + 1] = Symbol;
    }
    printf("\n");
    printf("Получившийся текст: \n \r");
    for (i = 0; i <= TextSize; i++)
    {
        switch (OurText[i])
        {
        case 'A' - 'Z' || 'А' - 'Я':
            printf("%c", OurText[i]);
            putc(OurText[i], OutPutFile);
        }
    }
 
    fclose(OutPutFile);
    system("pause");
    return 0;
}
Может кто объяснить, почему switch не хочет пропускать символы? Без него все работает, но выводит в добавок и те символы, которые мне не нужны. К тому же в конце текста откуда-то появляется буква "я".

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

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

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

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

  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
Похожие ответы