Dict.CN 在线词典, 英语学习, 在线翻译
aurain
专注网络编程
C++博客
首页
新文章
新随笔
聚合
管理
posts - 52, comments - 140, 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
水
阅读(1229)
评论(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
博主是一个虚心学习的好同志!学习了!
回复
更多评论
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
整数划分算法原理与实现
求二进制数中1的个数
计算最大公约数的两种算法
用至少三种方法实现1+2+...+n
Win32内存相关API
删除首次出现字串
内部排序算法比较
一个数组,下标从0到n,元素为从0到n的整数。判断其中是否有重复元素
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
<
2008年12月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(52)
c/c++基础知识(10)
socket编程(7)
tcp/ip(16)
udt分析(2)
软件分析(9)
算法与数据结构(8)
协议分析
随笔档案
(52)
2008年11月 (6)
2008年10月 (5)
2008年9月 (2)
2008年8月 (6)
2008年7月 (2)
2008年6月 (11)
2008年5月 (3)
2008年4月 (4)
2008年3月 (3)
2008年2月 (7)
2008年1月 (1)
2007年12月 (2)
网络开发
C++的罗浮宫
C++基础知识
逆水行舟
基础知识
紫月城游戏软件
网络编程
最新随笔
1. dns服务软件
2. UDT接发数据
3. udt包结构解释
4. udphdr结构
5. tcphdr结构
6. iphdr结构
7. 【分享】软件工程规范-软件工程文档模板
8. 整数划分算法原理与实现
9. 求二进制数中1的个数
10. 讨论:关于客户端使用何种网络模型
搜索
积分与排名
积分 - 51486
排名 - 44
最新随笔
1. dns服务软件
2. UDT接发数据
3. udt包结构解释
4. udphdr结构
5. tcphdr结构
6. iphdr结构
7. 【分享】软件工程规范-软件工程文档模板
8. 整数划分算法原理与实现
9. 求二进制数中1的个数
10. 讨论:关于客户端使用何种网络模型
最新评论
1. re: 【分享】软件工程规范-软件工程文档模板[未登录]
收了。谢谢
--achilles
2. re: 【分享】软件工程规范-软件工程文档模板
好
--海条
3. re: 常见笔试题
谢谢楼主
--笨鹅
4. re: 浩方对战平台原理初步分析
评论内容较长,点击标题查看
--水
5. re: 【分享】软件工程规范-软件工程文档模板
好东西啊
--物价
阅读排行榜
1. TCP/IP详解读书笔记(第九章 IP选路)(2125)
2. 介绍一个P2P点播直播开源项目,挺不错的(1884)
3. 常见软件登录简要说明(QQ,MSN,盛大冒险岛)(1783)
4. 指针和引用的联系与区别(1594)
5. TCP/IP详解读书笔记(第一章)(1531)
评论排行榜
1. 用至少三种方法实现1+2+...+n(19)
2. 【分享】软件工程规范-软件工程文档模板(11)
3. 删除首次出现字串(10)
4. Base64编码解码(9)
5. TCP/IP详解读书笔记(第一章)(8)
60天内阅读排行
1. 【分享】软件工程规范-软件工程文档模板(1516)
2. 计算最大公约数的两种算法(1369)
3. 整数划分算法原理与实现(1169)
4. 讨论:关于客户端使用何种网络模型(1061)
5. UDT接发数据(954)