编写一个函数reverse_string(char*string)

题目://编写一个函数reverse_string(char*string)逆序再存到数组
思想:第一个字符和最后一个字符交互
在这里插入图片描述

求字符串长度用strlen还是sizeof??
strlen是用来字符串长度,只针对字符串,要关注\0的位置,计算的是\0前面的字符串有多少
sizeof是计算机数据占用内存空间的大小,单位是字节,不在乎内存中存放是什么

补充:如何用递归法解决这道题?
在这里插入图片描述

这里的str+1代表含义:地址(指针)的加减运算,移动n个单位的char型,移动到指向第n个元素
*str+1,先求出str指针存放的内容,将内容在加1.例如存放字符”a“—>“a+1”---->“字符b”(ascii码表)

完整代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


//编写一个函数reverse_string(char*string)逆序再存到数组


//数组下标法
//void reverse_string(char *string)
//{
//	//第一个和最后一个字符交互位置法
//	int len=strlen(string);//不用sizoef,strlen=6
//	int left = 0;
//	int right = len - 1;
//	while (left <= right)//三合一
//	{
//		char temp = *(string + left);
//		*(string + left) = *(string + right);
//		*(string + right) = temp;
//		left++;
//		right--;
//	}
//
//}

//指针法
//void reverse_string(char *string)
//{
//	//第一个和最后一个字符交互位置法
//	int len = strlen(string);//不用sizoef,strlen=6
//	char* left = string;
//	char* right = string+len-1;//指针加减的运算
//	while (left <=right)//三合一
//	{
//		char temp = *left;
//		*left = *right;
//		*right = temp;
//		left++;
//		right--;
//	}
//}

//递归调用法
void reverse_string(char *str)
{
	int len = strlen(str);
	char tmp = *str;
	*str = *(str + len - 1);
	*(str + len - 1) = '\0';
	if (strlen(str + 1) > 1)
	{
		reverse_string(str + 1);
	}
	*(str + len - 1) = tmp;
}
int main()
{
	char arr[] = "abcdef";
	//【a b c d e f \0】==7字节
	//int sz = sizeof(arr) / sizeof(arr[0]);他的值是7,代表空间大小
	reverse_string(arr);
	printf("%s\n", arr);
	system("pause");
	return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值