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