了解
理解递归2个重要点
1、参数的入栈模型;
2、函数的嵌套调用返回流程。
memset()函数:
用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
strcat()函数:
char *strcat(char *dest,char *src);把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)。
strncpy()函数:
char *strncpy(char *dest, const char *src, size_t n) ;把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
strncat()函数
char *strncat(char *dest, const char *src, size_t n) 追加src指向字符串结尾的字符串到dest指向最多n个字符长。
方法1:指针
#include<stdio.h>
#include<string.h> //strlen的头文件
int inverse(char *strl)
{
if(strl == NULL)
{
return -1;
}
int length = strlen(strl);
char *p1; //注意该指针的类型
char *p2;
p1 = strl;
p2 = strl + length - 1;
while(p1 < p2)
{
char buf = *p1;
*p1 = *p2;
*p2 = buf;
++p1;
--p2;
}
return 0;
}
void main()
{
char data[] = "abcdefg";
inverse(data);
printf("%s\n",data);
}
方法2:递归
1、在函数中直接输出
int inverse02(char *strl)
{
if(strl == NULL)//递归结束的异常条件
{
return -1;
}
if(*strl == '\0')//递归结束的条件
{
return -1;
}
inverse02(strl+1);
printf("%c",*strl);
}
2、把逆序的结果存入全局变量
char g_buf[1000];
int inverse03(char *strl)
{
if(strl == NULL)//递归结束的异常条件
{
return -1;
}
if(*strl == '\0')//递归结束的条件
{
return -1;
}
inverse03(strl+1);
strncat(g_buf,strl,1);
}
3、递归指针函数参数
int inverse04(char *strl,char *buf)
{
if(strl == NULL)//递归结束的异常条件
{
return -1;
}
if(*strl == '\0')//递归结束的条件
{
return -1;
}
inverse04(strl+1,buf);
strncat(buf,strl,1);
}
void main()
{
char data[] = "abcdefg";
char mydata[100] = {0};
inverse04(data,mydata);
printf("mydata:%s\n",mydata);
}