#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)可以判断递归调用结束。