前言
之前我遇到这个题也是没有思路,但是在博客中找,也没有找到自己想要的方法,现在我懂了三种方法,接下来依次写出来 注意题目要求(反向排列不是逆序打印) 题目如下
一、左右指针(非递归实现)
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;
}
二、使用指针解决(递归)
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;
}
三、数组左右指针(递归实现)
第三种方法和第一种相似 但是需要对传入的参数进行参加 看代码
#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;
}
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了关于字符串逆序的递归和非递归方法,有问题可以评论留言哦!
|