求教``关于std::find的使用``

fdsjflfc33 2005-04-13 11:40:47
现有两个BYTE型的数组```一个是BYTE buf[10000]、BYTE srcbuf[],我要在buf里找和srcbuf匹配的数据的位置```请问该如何写?
...全文
1165 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunman1982 2005-04-14
  • 打赏
  • 举报
回复
strpbrk
fdsjflfc33 2005-04-14
  • 打赏
  • 举报
回复
明天早上7点来``
MadLee 2005-04-14
  • 打赏
  • 举报
回复
strstr
whyglinux 2005-04-14
  • 打赏
  • 举报
回复
根据BYTE类型的特点(unsigned char),这个数组BYTE buf[10000]其实就是一个字符数组,可以用类似string的方法进行处理。

typedef basic_string<BYTE> ustring; // 定义BYTE型的string

BYTE buf[10000];
BYTE srcbuf[];

// ...

ustring s(buf, buf + sizeof(buf)/sizeof(buf[0])); // 转换为ustring

然后就跟使用string一样可以使用find类搜索函数了。这类函数返回的就是位置。
whoho 2005-04-14
  • 打赏
  • 举报
回复
std::search(buf, buf+1000, strcbuf, strcbuf+len)就可以了,返回一个指针
whoho 2005-04-14
  • 打赏
  • 举报
回复
std::string::find_first_of的实现你可以自己去查看,算法还是比较好理解的
^^^^刚刚打错了
也是线性搜索,但进行N次,所以复杂度是O(N^N)

照你这里的说法,你应当是要模式匹配的算法才对,你可以先将BYTE数组转为string,然后
调用string::find就好了
tip9914 2005-04-14
  • 打赏
  • 举报
回复
其实最简单的就是用search()算法了^_^
查找某个子序列首次出现的地点
tip9914 2005-04-14
  • 打赏
  • 举报
回复
事的,没有使用KMP,很容易看懂
不过find_first_of事用来查找【first1,last1)区间中有【first2,last2)中任何一个元素第一次出现的位置,所以事不能实现搂住的目的的,
想查找部分匹配的话,或者自己写,或者用find_end,不过这个算法事用来查找序列2在序列1中最后出现的地点,所以可能也有些说不过去,如果序列1中只包含1个序列2的话事没有问题的
实在不行自己写了^_^
whoho 2005-04-14
  • 打赏
  • 举报
回复
std::string::find_first_of的实现你可以自己去查看,算法还是不太好理解的
whoho 2005-04-14
  • 打赏
  • 举报
回复
std::find只能匹配单个元素,其实只是一个简单的线性搜索,复杂度为O(n)
whoho 2005-04-14
  • 打赏
  • 举报
回复
想知道的话,自己去读源码不是更好?
fdsjflfc33 2005-04-14
  • 打赏
  • 举报
回复
是的`楼上的``我就是在猜``std::find是内部是不是用了kmp算法``如果是的话我直接拿来用`
zzqsc 2005-04-14
  • 打赏
  • 举报
回复
上面的代码可处理自截流中包含'\0'的问题
zzqsc 2005-04-14
  • 打赏
  • 举报
回复
时间复杂度为O(N!)的算法
//从长度为lsource的source字节流中查找出序列为长度为lcmp的cmp字节流
byte * serachbyte(register byte * source,register int lsource,register byte * cmp,register int lcmp)
{
for(int i=0;i<lsource&&(lsource-i>=lcmp);i++)
{
register byte * temp=source+i;
if(memcmp(temp,cmp,lcmp)==0)//相同
return temp;
}
return 0;
}
如果要求更快一点的话,要用模式匹配算法,太复杂
sunandmoon1314 2005-04-14
  • 打赏
  • 举报
回复
BYTE 就是 unsigned char 范围 0-255
而char则到了128之后就是负值
fdsjflfc33 2005-04-13
  • 打赏
  • 举报
回复
BYTE是一个无符号的char型``占8位`你上面的代码我应该怎样转?
xfxf521 2005-04-13
  • 打赏
  • 举报
回复
string line1="We";
string line2="weajshjdh";
string::size_type pos=0;
pos=line2.find_first_of(line1,pos);
好象在c++没听说过你所说的BYTE类型!!

64,682

社区成员

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

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