字符串的删除,递归实现

#include<stdio.h>
#include<string.h>

char *fun(char *p)                
{
 while(p != NULL)
 { 
 char b[40];
 char *q=p;
 char *m = b;
 char *t="abc";
 int i=0;
 int flag = 0;
 while(*p !='\0')
 {
  if(  (*p == *t) &&  (*(p+1) == *(t+1)) && (*(p+2) == *(t+2)))
  {
   p+=3;
   flag = 1;
  }
  *m = *p;
  p++,m++;
 }
// printf("%s\n",q);
// printf("%s\n",b);
 strcpy(q,b);
 if(flag == 1)
  return fun(fun(q));
 else
  return NULL;
 }
}

int main()
{
 char a[ ]="abc hdaabcbcsjkdh fhdfh abc"; 
 fun(a);
 printf("%s\n",a); 
 return 0;
}

总结:这个程序总的来说用到了一些比较常用的c语言技术,在编写中也遇到了很多错误,使得调试变得困难,遇到的困难主要有以下几点

1、在循环中加入了break使得函数无法传递。

break不能用于循环语句和switch语句之外的任何其他语句中。

continue用于结束本次循环,继续下一次循环。

2、在指针操作上的理解,对于一个指向字符串的指针,我们无法修改其上层值。

只能对数组或者malloc开辟的空间。

3、在使用递归时要注意加入键值。

4、函数的递归和返回值的使用,return fun(fun(q)),当flag=1时证明还在处理“abc”,在递归时需要调用返回值所以在后面返回一个return fun()

当还有abc的时候就反复调用,实现了递归调用。

当处理完后,需要return 一个NULL,实现对递归调用的终止,使用while(p != NULL)可以判断递归调用结束。

猜你喜欢

转载自blog.csdn.net/yyq1w2e3/article/details/6642155
今日推荐