Напечатать в алфавитном порядке все буквы, входящие в текст - 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()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д