刚看了华为研发试题,第一题都不会做。请高手帮忙看下解决方法
刚看了华为研发试题,第一题都不会做。请高手帮忙看下
删除子串,返回子串个数。给出的程序没有看懂,尤其是assert和动态地址分配,,有人能给个注释么
另这个程序能得满分么
int delete_sub_str(const char *str,const char *sub_str,char *result)
{
assert(str!=NULL&&sub_str!=NULL);
const char *p,*q;
char *t,*temp;
p=str;q=sub_str;t=result;
int n,count;
n=strlen(q);
temp=(char *)malloc(n+1);
memset(temp,0x00,n+1);
while(*p)
{
memcpy(temp,p,n);
if(strcmo(temp,q)==0)
{
count++;
memset(temp,0x00,n+1);
p+=n;
}
else
{
*t=*p;
p++;t++;
memset(temp,0x00,n+1);
}
}
free(temp);
return count;
}
------解决方案--------------------
删除子串,返回子串个数。给出的程序没有看懂,尤其是assert和动态地址分配,,有人能给个注释么
另这个程序能得满分么
int delete_sub_str(const char *str,const char *sub_str,char *result)
{
assert(str!=NULL&&sub_str!=NULL);
const char *p,*q;
char *t,*temp;
p=str;q=sub_str;t=result;
int n,count;
n=strlen(q);
temp=(char *)malloc(n+1);
memset(temp,0x00,n+1);
while(*p)
{
memcpy(temp,p,n);
if(strcmo(temp,q)==0)
{
count++;
memset(temp,0x00,n+1);
p+=n;
}
else
{
*t=*p;
p++;t++;
memset(temp,0x00,n+1);
}
}
free(temp);
return count;
}
------解决方案--------------------
- C/C++ code
int delete_sub_str(const char *str,const char *sub_str,char *result) { assert(str!=NULL&&sub_str!=NULL); /* 入口处判断输入参数是否合法 */ const char *p,*q; char *t,*temp; p=str;q=sub_str;t=result; /* p指向原始字符串当前位置, q指向子串, t指向结果字符串当前位置 */ int n,count; /* count用来记录字串数 */ n=strlen(q); temp=(char *)malloc(n+1); memset(temp,0x00,n+1); while(*p) /* 遍历原始字符串 */ { memcpy(temp,p,n); /* 从p所指向的位置开始拷贝长度为字串长度的字符串到temp中 if(strcmo(temp,q)==0) { /* 如果temp与字串相等,字串数+1, p向后移动n个位置 */ count++; memset(temp,0x00,n+1); p+=n; } else { /* 如果temp不与字串相等, 则把p指向的当前拷贝到t中,并使p和t都指向下一位置 */ *t=*p; p++;t++; memset(temp,0x00,n+1); } } free(temp); return count; }
------解决方案--------------------