将参数字符串中的字符反向排列,不是逆序打印。用递归实现
Posted 再吃一个橘子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将参数字符串中的字符反向排列,不是逆序打印。用递归实现相关的知识,希望对你有一定的参考价值。
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
我们先写一个这个代码,其实下面这段代码并不满足要求:不能使用C函数库中的字符串操作函数。也没有使用递归 但是可以实现想要的效果。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列,不是逆序打印。
//要求:不能使用C函数库中的字符串操作函数。
void reverse_string(char* str) {
int len = strlen(str);
int left = 0;//'a'
int right = len - 1;
while (left<right) {
int temp = 0;
temp = str[left];
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
int main()
{
char arr[10] = "abcdef";
//数组名就是首元素的地址
//首元素是char类型,所以char*接受地址
reverse_string(arr);
printf("%s\\n", arr);//期望结果是fedcba
return 0;
}
那么符合题意的代码应该怎么写呢?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//编写一个函数 reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列,不是逆序打印。
//要求:不能使用C函数库中的字符串操作函数。
int my_strlen(char *str) {
int count = 0;
while (*str != '\\0') {
count++;
str++;
}
return count;
}
void reverse_string(char* str) {
int len = my_strlen(str);
char temp = str[0];
str[0] = str[len - 1];
str[len - 1] = '\\0';
if (my_strlen(str + 1) >= 2) {
reverse_string(str + 1);
}
str[len - 1] = temp;
}
int main()
{
char arr[10] = "abcdef";
//数组名就是首元素的地址
//首元素是char类型,所以char*接受地址
reverse_string(arr);
printf("%s\\n", arr);//期望结果是fedcba
return 0;
}
以上是关于将参数字符串中的字符反向排列,不是逆序打印。用递归实现的主要内容,如果未能解决你的问题,请参考以下文章
编写一个函数 reverse_string(char * string)实现:将参数字符串中的字符反向排列 。(递归实现)
C 语言字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )