Вывод строки в обратном порядке - C (СИ) (152227)
Формулировка задачи:
Вот часть программы, которая должна выводить строки в обратном порядке
#include <stdio.h> void reverse(char *s) { size_t len = strlen(s); char *t = s + len - 1; // не понимаю, почему в указателе происходят вычисления и для чего они while (t >= s) { printf("%c", *t); // почему *t, а не просто t ? t = t - 1; } puts(" "); }
Решение задачи: «Вывод строки в обратном порядке»
textual
Листинг программы
#include <stdio.h> void rev(const char * s) { if ( *s ) { rev(s + 1); printf("%c", *s); } } typedef char str_t[256]; #define get_str(s) ( scanf("%255[^\n]%*c", (s)) == 1 ) int main(void) { str_t s; while ( printf("\nString: ") && get_str(s) && printf("Reversed: ") ) rev(s); return 0; }
Объяснение кода листинга программы
Вывод строки в обратном порядке.
В данном коде реализована функция rev
, которая рекурсивно выводит символы строки в обратном порядке.
Код функции main
считывает строку с помощью функции scanf
в массив s
, затем вызывает функцию rev
для этого массива, выводит результат, после чего запрашивает ввод строки снова.
- Включаемые заголовочные файлы:
stdio.h
— для использования функций ввода-вывода.
- Объявление функции
rev
:- Принимает указатель на символ в качестве аргумента.
- Если указатель не равен
NULL
, то рекурсивно вызывает себя для следующего симвома в строке и выводит текущий символ. - Если указатель равен
NULL
, то выводит символNULL
(конец строки).
- Объявление типа
str_t
:- Тип, представляющий строку символов фиксированной длины.
- Длина строки ограничена значением 255 символов.
- Объявление макроса
get_str
:- Считывает строку с помощью функции
scanf
. - Проверяет успешность ввода с помощью оператора
==
. - Возвращает
1
, если ввод был успешным, и0
в противном случае.
- Считывает строку с помощью функции
- Объявление функции
main
:- Ввод-вывод управляется с помощью цикла
while
. - В начале каждого цикла выводится приглашение для ввода строки.
- После успешного ввода строки вызывается функция
rev
для этой строки. - После вывода перевернутой строки выводится приглашение для ввода следующей строки.
- Цикл продолжается до тех пор, пока пользователь не введет пустую строку.
- Ввод-вывод управляется с помощью цикла
- Вывод перевернутой строки:
- В функции
rev
рекурсивно вызывается функцияrev
для следующего симвома в строке. - Каждый символ выводится с помощью функции
printf
.
- В функции
- Ввод строки:
- В функции
main
выводится приглашение для ввода строки. - Ввод считывается с помощью функции
scanf
. - Ввод проверяется на успешность с помощью оператора
==
. - Если ввод был успешным, то вызывается функция
rev
для этой строки. - Если ввод был неуспешным, то цикл продолжается без изменений.
- В функции
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д