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