文章目录

  • ​​前言​​
  • ​​一、左右指针(非递归实现)​​
  • ​​1.引入代码​​
  • ​​二、使用指针解决(递归)​​
  • ​​1.引入代码​​
  • ​​三、数组左右指针(递归实现)​​
  • ​​总结​​

前言

之前我遇到这个题也是没有思路,但是在博客中找,也没有找到自己想要的方法,现在我懂了三种方法,接下来依次写出来

注意题目要求(反向排列不是逆序打印

题目如下

字符串逆序(递归实现)_i++

一、左右指针(非递归实现)

字符串逆序(递归实现)_i++_02

1.引入代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void print(char arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%c ", arr[i]);
}
printf("\n");
}
void Swap(char arr[],int sz) {

int left = 0;
int right = sz - 1;
while (left <= right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main() {
char arr[] = "abcdefg";
int sz = strlen(arr);
Swap(arr,sz);
print(arr, sz);
return 0;
}

字符串逆序(递归实现)_c语言_03

二、使用指针解决(递归)

字符串逆序(递归实现)_#include_04

1.引入代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void print(char arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%c ", arr[i]);
}
printf("\n");
}
//求字符串长度
int my_strlen(char* str) {
int count = 0;
while (*(str) != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
char tmp = *str;
int sz = my_strlen(str);
*str = *(str + sz - 1);
*(str + sz - 1) = '\0';
if (sz>=2)
reverse_string(str+1);
*(str + sz - 1) = tmp;
}
int main() {
char arr[] = "abcdefg";
int sz = my_strlen(arr);
reverse_string(arr);
print(arr, sz);
return 0;
}

字符串逆序(递归实现)_c语言_05

三、数组左右指针(递归实现)

第三种方法和第一种相似

但是需要对传入的参数进行参加

看代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void print(char arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%c ", arr[i]);
}
printf("\n");
}
//求字符串长度
int my_strlen(char* str) {
int count = 0;
while (*(str) != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char arr[],int left,int right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
if (left <= right)
reverse_string(arr, left + 1, right - 1);
}
int main() {
char arr[] = "abcdefg";
int sz = my_strlen(arr);
reverse_string(arr,0,sz-1);
print(arr, sz);
return 0;
}

字符串逆序(递归实现)_#include_06

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了关于字符串逆序的递归和非递归方法,有问题可以评论留言哦!