string类里的find()成员函数问题

Dic4000 2006-12-20 09:28:22
下面两个是string类里的find()成员函数的声明:

size_type find( const char* str, size_type index );
size_type find( const char* str, size_type index, size_type length );

请问:这两个函数都是查找子串的吗?有什么区别?(感觉这两个函数效果都一样)
第二个find()里的第三个参数指的是谁的长度?


...全文
325 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
realrukawa 2006-12-21
  • 打赏
  • 举报
回复
很明显
lw1a2 2006-12-20
  • 打赏
  • 举报
回复
index=s.find("fghi",0,1);是找"f",

index=s.find("fghi",0,2);是找"fg"

....
cmail 2006-12-20
  • 打赏
  • 举报
回复
你那是特殊情况当然一样了。
如果
const char *str = "abcdef";
只要找出含前三个字符的串,即:“abc”,
可以这样写,;
s.find(str,0,3);
用两个参数的怎么写?s.find(str,0)?这样是找“abcdef”
了。

Dic4000 2006-12-20
  • 打赏
  • 举报
回复
如果length是指子串str的长度,那我完全可以不用find( const char* str, size_type index, size_type length );而用size_type find( const char* str, size_type index );

写了个测试,发现length小于子串的长度,也能找到子串。
string s="abcdefghi";
string::size_type index;
index=s.find("fghi",0,1);
if(index==string::npos) cout<<"Not find"<<endl;
else cout<<"index="<<index<<endl;

输出结果为:index=5;
写成index=s.find("fghi",0,4);也可以
写成index=s.find("fghi",0);也行

这两个函数的看上去行为都一样的,那么到底用哪一个较好呢?
AI风 2006-12-20
  • 打赏
  • 举报
回复
看看模板的源代码:
size_type __CLR_OR_THIS_CALL find(const _Elem *_Ptr,
size_type _Off, size_type _Count) const
{ // look for [_Ptr, _Ptr + _Count) beginnng at or after _Off
_DEBUG_POINTER(_Ptr);
if (_Count == 0 && _Off <= _Mysize)
return (_Off); // null string always matches (if inside string)

size_type _Nm;
if (_Off < _Mysize && _Count <= (_Nm = _Mysize - _Off))
{ // room for match, look for it
const _Elem *_Uptr, *_Vptr;
for (_Nm -= _Count - 1, _Vptr = _Myptr() + _Off;
(_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0;
_Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1)
if (_Traits::compare(_Uptr, _Ptr, _Count) == 0)
return (_Uptr - _Myptr()); // found a match
}

return (npos); // no match
}

// look for [_Ptr, _Ptr + _Count) beginnng at or after _Off
这个注释说的已经很明白了
在看看这个函数:
size_type __CLR_OR_THIS_CALL find(const _Elem *_Ptr, size_type _Off = 0) const
{ // look for [_Ptr, <null>) beginnng at or after _Off
return (find(_Ptr, _Off, _Traits::length(_Ptr)));
}

_Traits::length(_Ptr))应该就是取Ptr的长度。
cmail 2006-12-20
  • 打赏
  • 举报
回复
在string对象中找str的子串,其中这个子串在str中的起始位置index,长度length.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧