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

  1. Включаемые заголовочные файлы:
    • stdio.h — для использования функций ввода-вывода.
  2. Объявление функции rev:
    • Принимает указатель на символ в качестве аргумента.
    • Если указатель не равен NULL, то рекурсивно вызывает себя для следующего симвома в строке и выводит текущий символ.
    • Если указатель равен NULL, то выводит символ NULL (конец строки).
  3. Объявление типа str_t:
    • Тип, представляющий строку символов фиксированной длины.
    • Длина строки ограничена значением 255 символов.
  4. Объявление макроса get_str:
    • Считывает строку с помощью функции scanf.
    • Проверяет успешность ввода с помощью оператора ==.
    • Возвращает 1, если ввод был успешным, и 0 в противном случае.
  5. Объявление функции main:
    • Ввод-вывод управляется с помощью цикла while.
    • В начале каждого цикла выводится приглашение для ввода строки.
    • После успешного ввода строки вызывается функция rev для этой строки.
    • После вывода перевернутой строки выводится приглашение для ввода следующей строки.
    • Цикл продолжается до тех пор, пока пользователь не введет пустую строку.
  6. Вывод перевернутой строки:
    • В функции rev рекурсивно вызывается функция rev для следующего симвома в строке.
    • Каждый символ выводится с помощью функции printf.
  7. Ввод строки:
    • В функции main выводится приглашение для ввода строки.
    • Ввод считывается с помощью функции scanf.
    • Ввод проверяется на успешность с помощью оператора ==.
    • Если ввод был успешным, то вызывается функция rev для этой строки.
    • Если ввод был неуспешным, то цикл продолжается без изменений.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы