Я думаю, что мы могли бы использовать возвращаемое значение int, чтобы найти длину строки.
Для нашего базового случая строка, которая является просто нулевым ограничителем '\0'
, всегда будет нулевой.
if (*c == '\0') {
return 0;
}
Начиная с "abcde"
, к которому в конце добавлен нулевой терминатор, мы не можем точно знать, когда закончится строка. Таким образом, мы считаем, что длина строки всегда будет на 1 больше, чем указатель, продвинутый на один шаг вперед, что приведет к тому, что символ * будет указывать на "bcde"
, и т. Д.
return 1 + StringReverse(c + 1);
И этов значительной степени это для рекурсивной функции.
int StringReverse(char *c) {
if (*c == '\0') {
return 0;
}
return 1 + StringReverse(c + 1);
}
Теперь это ничего не будет делать само по себе, внутренние вызовы функции не будут знать, где начало строки, чтобы допустить обмен ... кроме места, которое изначальновызвал его.
Таким образом, мы оборачиваем рекурсивный вызов функции другой функцией, которая выполняет обмен.
void ReverseString(char *start) {
int size = StringReverse(start);
// The swap code goes here...
}