C语言指针——递归反转字符串
递归要点:
1.参数入栈模型
2.函数调用模型(嵌套返回条件)
递归和全局变量,局部变量。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
//字符串逆序
int turnOnBuf(char *inbuf)
{
int ret = 0;
if (inbuf == NULL) {
ret = -1;
printf("turnOnBuf() inbuf == NULL: %d\n", ret);
return ret;
}
char *p1 = inbuf;
char *p2 = inbuf + strlen(inbuf) -1;
char c;
while (p1 < p2) {
c = *p1;
*p1 = *p2;
*p2 = c;
p1++;
p2--;
}
return ret;
}
/*
递归要点
1.参数入栈模型
2.函数调用模型(嵌套返回条件)
*/
//递归和全局变量
char g_buf[100];
int turnOnBuf1(char *inbuf)
{
int ret = 0;
if (inbuf == NULL) {
ret = -1;
printf("turnOnBuf() inbuf == NULL: %d\n", ret);
return ret;
}
char *p = inbuf;
if (*p == '\0') {
return ret;
}
turnOnBuf1(inbuf + 1);
//printf("%c", *p);
strncat(g_buf, p, 1);
return ret;
}
//递归和非全局变量(函数参数)
int turnOnBuf2(char *inbuf, char *outbuf)
{
int ret = 0;
if (inbuf == NULL || outbuf == NULL) {
ret = -1;
printf("turnOnBuf() inbuf == NULL or outbuf == NULL: %d\n", ret);
return ret;
}
char *p = inbuf;
if (*p == '\0') {
return ret;
}
turnOnBuf2(inbuf + 1, outbuf);
//printf("%c", *p);
strncat(outbuf, p, 1);
return ret;
}
int main()
{
char *buf = "abcdefg";
//turnOnBuf(buf);
//printf("buf turn on: %s\n", buf);
memset(g_buf, 0, sizeof(g_buf));
turnOnBuf1(buf);
printf("buf turn on: %s\n", g_buf);
char buf2[100] = { 0 };
turnOnBuf2(buf, buf2);
printf("buf turn on: %s\n", buf2);
return 0;
}