Задача на преобразование последовательности символов - C (СИ)
Формулировка задачи:
Здравствуйте. Есть задача:
пусть во входном потоке находится последовательность символов, заканчивающаяся точкой (кодировка ASCII). Вывести в выходной поток последовательность символов, оставив только те группы цифр, которые составлены из подряд идущих цифр с возрастающими значениями; все остальные цифры и группы цифр удалить ( другие символы копировать в выходной поток без изменения).
Пока получилось вот это:
Проблема: не выводится последняя цифра из удовлетворяющей последовательности, т.е. при вводе 1234asf87123 программа выводит 123asf12, хотя должна 1234asf123. Надеюсь на вашу помощь!
char x = 0, y = 0; char flag = 0; x = getchar(); while ((y = getchar()) != '.') { if (isdigit(x) && isdigit(y)) { flag = 1; } if (flag) { while (y - x == 1) { putchar(x); x = y; } } if (!isdigit(x)) putchar(x); x = y; }
Решение задачи: «Задача на преобразование последовательности символов»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> int main() { int x, y; int seq = 0, cur; x = getchar(); while (x != '.') { y = getchar(); if (isdigit(x)) { cur = (isdigit(y) && (y - x == 1)); if (seq || cur) { putchar(x); } seq = cur; } else { putchar(x); } x = y; } return 0; }
Объяснение кода листинга программы
В этом коде считываются два символа за раз из стандартного ввода, и они сравниваются. Если первый символ является числом и второй символ является следующим числом в последовательности (на единицу больше), то оба символа выводятся на стандартный вывод. Если первый символ не является числом, он также выводится на стандартный вывод. После этого два символа считываются снова, и процесс повторяется до тех пор, пока не будет введен конечный символ (в данном случае точка). Вот список ключевых моментов кода с номерами:
- Ввод двух символов: x = getchar(); y = getchar();
- Проверка, является ли первый символ числом: if (isdigit(x)) {
- Проверка, является ли второй символ следующим числом в последовательности: cur = (isdigit(y) && (y - x == 1));
- Условие для вывода символов: if (seq || cur) {
- Вывод символа: putchar(x);
- Обновление значения seq: seq = cur;
- Условие для вывода символа, если первый символ не является числом: else {
- Вывод символа: putchar(x);
- Обновление значений x и y: x = y;
- Цикл продолжается до тех пор, пока не будет введен конечный символ: while (x != '.') {
- Ввод двух символов: x = getchar(); y = getchar();
- Проверка, является ли первый символ числом: if (isdigit(x)) {
- Проверка, является ли второй символ следующим числом в последовательности: cur = (isdigit(y) && (y - x == 1));
- Условие для вывода символов: if (seq || cur) {
- Вывод символа: putchar(x);
- Обновление значения seq: seq = cur;
- Условие для вывода символа, если первый символ не является числом: else {
- Вывод символа: putchar(x);
- Обновление значений x и y: x = y;
- Конец цикла: }
- Возврат 0, чтобы указать, что программа успешно завершилась: return 0; Обратите внимание, что этот код не включает обработку ошибок или проверку границ для ввода символов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д