社区
C++ 语言
帖子详情
求教``关于std::find的使用``
fdsjflfc33
2005-04-13 11:40:47
现有两个BYTE型的数组```一个是BYTE buf[10000]、BYTE srcbuf[],我要在buf里找和srcbuf匹配的数据的位置```请问该如何写?
...全文
1165
17
打赏
收藏
求教``关于std::find的使用``
现有两个BYTE型的数组```一个是BYTE buf[10000]、BYTE srcbuf[],我要在buf里找和srcbuf匹配的数据的位置```请问该如何写?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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类型!!
求教
:map的value为vector类型时,
使用
iter->second会报错
} error信息如下: could not convert 'it.
std
::_Rb_tree_const_iterator,
std
::vector > > >::operator->()->
std
::pair,
std
::vector > >::second' from 'const
std
::vector >' to '
std
::vector >::const_iterator...
求教
贴:HDOJ 1856 More Is Better!!!
HDOJ 1856 More Is Better
求教
帖 (大一在读回复可能不及时,如果有大佬教的话非常感谢) 简单并查集 ...using namespace
std
; int bin[10010]; int c[10010]; int maxi; int m; struct rank { int a,...
将c语言格式转化为python_
求教
将C语言转化python!!
usingnamespace
std
;typedeflonglongll;constintmaxn=1e4+5;constintmod=1e9+7;constintINF=1<<30;structnode{stringsection,key,...node(strings="",stringk="",stringv=""){secti...using namespace
std
;t...
Games101作业二严令琪老师
这是光栅化的代码,
求教
//Screen space rasterization void rst::rasterizer::rasterize_triangle(const Triangle& t) { auto v = t.toVector4(); // TODO : Find out the bounding box of current ...
POJ 1426 Find The Multiple (附模运算公式)
(看到此篇文章并且懂为什么的人, 希望
求教
, 谢谢!!) #include #include using namespace
std
; int visited[202]; __int64 BFS(int mod) { __int64 temp, big; queue<__int64> q; q.push(1); while (!q....
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章