项目开发常见字符串处理模型-字符串反转模型
用二种方法去实现:
1 指针二头堵模型。
2 利用栈进行递归逆序。
1 指针二头堵模型:
二个指针p1,p2 分别指向字符串的开头和结尾,然后依次交换字符的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int inverse(char *str1)
{
int length = 0;
char *p1 = NULL;
char *p2 = NULL;
if (str1 == NULL)
{
return -1;
}
length = strlen(str1);
p1 = str1; //指针指向字符串的开头;
p2 = str1 + (length - 1); //指针指向字符串的最后一个;
while (p1 < p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
return 0;
}
int main(void)
{
char buf[] = "abcdefg"; //buf[] //数组内存分配在栈上,可以修改。 如果用指针声明字符串的话,字符串声明在常量区,内存不可修改,程序会报错。
inverse(buf);
printf("buf:%s\n", buf);
system("pause");
return 0;
}
2 利用栈进行递归逆序:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int inverse_stack(char *str1, char *buf)
{
if (str1 == NULL || buf == NULL) //递归结束的异常条件
{
return;
}
if (*str1 == '\0') //递归结束的正常条件
{
return;
}
inverse_stack(str1 + 1, buf);
strncat(buf, str1, 1); //到'\0'时递归结束, '\0'前一个字符为g, 然后是c, b, a。
}
int main(void)
{
char buf[] = "abcg";
char g_buf[1024] = { 0 };
inverse_stack(buf, g_buf);
printf("%s", g_buf);
system("pause");
return 0;
}