Posted on 2009-01-18 12:57
赞劲小子 阅读(1969)
评论(1) 编辑 收藏 引用 所属分类:
C和指针
这个题自己不会做,答案是从cdsn上得到的,写下来慢慢研究。
题目:写一个函数 int del_substr(char * str, const char *substr);
1.函数首先判断substr是否在str中,如果未出现,返回0。
2.如果出现,将str中的与substr一样的子串删除,返回1。
3.如果substr在str中多次出现,只删除第一次出现的子串,第二个参数绝对不出删除。
例如:str指向ABCDEFG,那么substr指向FGH、CDF或者XABC,都不会删除,返回0。
如果substr为CDE,则str为ABFG,然后返回1。
#include "stdio.h"
#define TRUE 1
#define FALSE 0
#define MAX 50
int del_substr(char *str, const char *substr);

int main()
{
char name[MAX];
gets(name);
del_substr(name,"abr");
printf("%s",name);
return 0;
}
int del_substr ( char *str , char const *substr )


{

const char *p2; /**//* 流遍被删字符串 */

char *p3; /**//* 中间变量,负责校对全部字符串相等*/

for ( ; '\0' != *str ; str++ )
{

for ( p2 = substr, p3 = str; /**//* 用p3承接str的值 */'\0' != *p2 ; p2++ , p3++ )
{
if ( *p2 != *p3 )

goto oo; /**//*break 的话只能跳出单层循环。*/
}

/**//*
** 给原始字符串重新赋值,以'\0' 结束
*/
while ( '\0' !=( *str++ = *p3++ ))
;
return TRUE;
oo: ;
}
return FALSE;
}