Напечатать в алфавитном порядке все буквы, входящие в текст - C (СИ)
Формулировка задачи:
Весь текст находится в txt файле, все данные должны быть обработаны и занесены в алфавитном порядке в выходной текст, а так же отобразиться на экране. При этом пользователь должен ввести название входного и выходного файлов.
P.S. До этого делал это же задание с немного отличными требованиями в паскале на PascalABC.NET, теперь вот на С первую же программу такую дали
Может кто объяснить, почему switch не хочет пропускать символы? Без него все работает, но выводит в добавок и те символы, которые мне не нужны. К тому же в конце текста откуда-то появляется буква "я".
Листинг программы
- #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;
- }
Решение задачи: «Напечатать в алфавитном порядке все буквы, входящие в текст»
textual
Листинг программы
- switch (OurText[i])
- {
- case 'A' - 'Z' || 'А' - 'Я':
- printf("%c", OurText[i]);
- putc(OurText[i], OutPutFile);
- }
Объяснение кода листинга программы
В представленном коде выполняется следующая последовательность действий:
- В зависимости от значения переменной
OurText[i]
выполняется одно из действий:- Если значение
OurText[i]
входит в диапазон от 'A' до 'Z' (включительно) или от 'А' до 'Я' (включительно), то выполняется блок кода внутри соответствующего случая (label) в структуреswitch
. - Если значение
OurText[i]
не входит в указанные диапазоны, то выполняется ничего.
- Если значение
- Внутри блока кода для случая, когда значение
OurText[i]
входит в диапазон от 'A' до 'Z' или от 'А' до 'Я', выполняется следующая последовательность действий:- Значение
OurText[i]
преобразуется в символ и выводится на экран с помощью функцииprintf()
. - Значение
OurText[i]
также записывается в файлOutPutFile
с помощью функцииputc()
. Список действий в коде:
- Значение
- Преобразование значения
OurText[i]
в символ. - Проверка значения
OurText[i]
на вхождение в диапазон от 'A' до 'Z' или от 'А' до 'Я'. - Вывод символа на экран с помощью функции
printf()
. - Запись символа в файл
OutPutFile
с помощью функцииputc()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д