aurain
技术文摘
posts - 137,  comments - 268,  trackbacks - 0

今天在cppblog看了一篇这样的博文,下午的时候为了熟悉下,自己也写了个,本来要给出原博文的地址的,但发现记不起来了,当时也是随意浏览的,这里表示抱歉。

int mystrstr(const char* src,const char* sub)
{
 
int ret = -1;
 
char * cp = (char *)src;
 
char *s1, *s2;

 
if (!*sub)
  
return ret;

 
while (*cp)
 
{
  s1 
= cp;
  s2 
= (char *)sub;

  
while (*s1 && *s2 && !(*s1-*s2))
  
{
   s1
++;
   s2
++;
  }


  
while (!*s2)
   
return ret;

  cp
++;
  ret
++;
 }


 
return ret;
}


int mystrlen(const char *src)
{
 
int ret = 0;
 
while (*src++)
 
{
  ret
++;
 }

 
return ret;
}


bool del_substr(char * src, const char * sub)
{
 
int idx = mystrstr(src, sub);
 
if (idx < 0)
 
{
  
return false;
 }

 
int iLen = mystrlen(sub);
 
for (int i=idx+1; i<mystrlen(src); i++)
 
{
  
*(src+i) = *(src+i+iLen);
 }

 
return true;
}


int _tmain(int argc, _TCHAR* argv[])
{
 
char szSrc[] = "abcdefghi";
 
char *szSub = "de";
 del_substr(szSrc, szSub);
 cout
<<szSrc<<endl;
}

posted on 2008-07-07 16:29 阅读(1769) 评论(10)  编辑 收藏 引用 所属分类: 算法与数据结构

FeedBack:
# re: 删除首次出现字串
2008-07-07 17:10 | hamburger
!(*s1-*s2)为什么不写成(*s1 == *s2)?  回复  更多评论
  
# re: 删除首次出现字串
2008-07-07 17:45 | 陈梓瀚(vczh)
事实上==更好,x86的比较不需要产生结果,减法会产生结果。  回复  更多评论
  
# re: 删除首次出现字串[未登录]
2008-07-08 03:11 | snow
how about src is NULL , and sub is NULL  回复  更多评论
  
# re: 删除首次出现字串[未登录]
2008-07-08 03:57 | strstr
if standard string functions are allowed to be used, how about following function? Maybe you just want to write your own strstr and strlen functions?

char * del_substr(char *src, const char *sub)
{
int i, j;
char *dst = src;
char *temp = strstr(src, sub);

if (src == NULL)
return NULL;
if (sub == NULL || temp == NULL)
return dst;

j = strlen(temp) - strlen(sub);

for (i = temp-dst; i < temp-dst+j; i++)
dst[i] = dst[i + strlen(sub)];
dst[i] = '\0';

return dst;
}  回复  更多评论
  
# re: 删除首次出现字串
2008-07-08 08:37 | feosun
while (!*s2)
return ret;

写成

if (!*s2)
return ret;
不是更好么  回复  更多评论
  
# re: 删除首次出现字串
2008-07-08 13:49 |
@hamburger,陈梓瀚(vczh)
这个我是借鉴微软标准库里面的实现方式,所以当时没考虑那么多。谢谢两位的提醒,受教了!  回复  更多评论
  
# re: 删除首次出现字串
2008-07-08 13:50 |
@snow
对,没有对传入参数进行判断了,以后我要注意了,即使平时测试也要养成严格的习惯。谢谢你  回复  更多评论
  
# re: 删除首次出现字串
2008-07-08 13:52 |
@strstr
嗯,写这个就是在不能使用crt的情况下的。
你写的也对,效率应该比我的要好些  回复  更多评论
  
# re: 删除首次出现字串
2008-07-08 13:53 |
@feosun
很有道理!  回复  更多评论
  
# re: 删除首次出现字串
2008-07-09 09:32 | cexer
博主是一个虚心学习的好同志!学习了!  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 493566
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜