Напишите функцию, которая разворачивает строку задом наперёд. Внимание, перезаписывается исходная строка, поэтому вам понадобится функция из Копирование строки в кучу.
Код будет выглядеть намного проще, если вы будете использовать функцию Swap, чтобы менять местами два символа.
Возьмите вспомогательные функции из Длина строки Swap (в теорию)
#include "test.h"
/**
* Меняет местами два символа.
*
* @param a указатель на один символ.
* @param b указатель на один символ.
*/
void swap(char* a, char* b);
// скопируйте функцию из предыдущей задачи
unsigned int str_length(const char* string);
// скопируйте функцию из предыдущей задачи.
char* str_dup(const char* string);
/**
* Разворачивает строку задом наперед.
* Например, из "Hello" получится "olleH".
* Результат будет записан на месте.
*
* Если строка не нультерминальная, то поведение не определено.
*
* @param string нуль терминальная строка, которая будет перевернута на месте.
*/
void str_reverse(char* string) {
// TODO: напиши меня!
// Подсказка:
// Используейте функцию str_length
// Используйте функцию swap
}
void cli(void) {
// TODO: напиши меня
// 1. считайте с консоли N - длину строки
// 2. аллоцируйте память с помощью malloc на N+1 символов
// 3. считайте с консоли строку длины N (+1 на \\0)
// 4. Примегите над строкой str_reverse
// 5. выведите результата в консоль
// 6. почистите память
}
void test(void) {
// Это тесты. НЕ УДАЛЯЙТЕ ИХ!
// Преподаватель будет грустить, если вы удалите тесты T_T.
// Тесты проверяют, что ваш код работает правильно.
// Если задача решена неправильно,
// то в консоли вы увидите ошибку и пояснение.
// Сдавайте лабу, когда устраните все ошибки в тестах.
// Если возникли трудности, то попросите преподавателя вам помочь ^_^.
{
char* str = str_dup("Hello");
ASSERT_STR_EQUAL("Hello", str);
str_reverse(str);
ASSERT_STR_EQUAL("olleH", str);
}
}
int main(void) {
test();
cli();
return 0;
}