项目开发常见字符串处理模型-字符串反转模型

用二种方法去实现:

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;
}

 

posted on 2019-01-21 14:47  锋邢天下  阅读(235)  评论(0编辑  收藏  举报

导航