题目://编写一个函数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;