Реверс строки рекурсивный и с использованием циклов
Я попытался написать программу на языке Си, которая перевернет строку в двух направлениях .
Второй способ должен быть рекурсивным .
моя функция putBack использует malloc для динамического выделения памяти для результата .
где я могу освободить память?Я думаю, что именно тогда, когда данные из Указателя, возвращенного putBack (), уже были скопированы в новый буфер на один символ больше.Но я не знаю, как это сделать.
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> //1 char *reverse(char *s){ int lengths = length(s); char *reverse = (char *) malloc(sizeof(char) * lengths); if(lengths>0){ int k = lengths-1; for(int i=0; i<lengths; i++, k--){ reverse[i] = s[k]; } }else{ reverse = ""; } return reverse;; } int length(char *s) { int n = 0; while(*s != '\0') { n++; s++; } return n; } void copy(char* s, int n, char* t) { int i = 0; while(i < n) { t[i] = s[i]; i++; } } char* putBack(char* s, char c) { const int n = length(s); char* r = malloc(sizeof(char) * (n+2)); copy(s, n, r); r[n] = c; r[n+1] = '\0'; return r; } char* reverseRec(char *input){ static int i =0; static char ReverseStr[10]; char* R[length(input)]; if(*input){ reverseRec(input+1); ReverseStr[i++]= *input; *R =putBack(ReverseStr,*input); //hängt ein Zeichen hinten String an } printf("%c", *input); return *R; }