我需要像memchr()这样的函数,但它应该能够找到子串(字符串),不是唯一的单个字符。 它应该返回在string中找到的第一个匹配项。
例如
p1 = afunclikememchr(str1,"here the function that can locate this substring",200);
对mods:我添加了C ++标签,因为这也与C ++相关
简而言之:我想要一个传统上称为memstr()
的函数。
此外,我必须使用C标准库,而不是C ++,并且该函数在找到'\0'
字节时不应该停止。
答案 0 :(得分:1)
由于您使用 c
和c++
标记了此问题(这是错误的),我正在利用这一事实来回答它,好像这是一个C问题(我不是知道它是否真的如此):
所以你正在寻找像memstr()
这样不是标准函数的东西,但我有一个实现here。
或者只使用GNU扩展程序memmem()
,如果可用,您不介意不标准。
答案 1 :(得分:0)
您是否考虑过strstr()?
http://pubs.opengroup.org/onlinepubs/009695399/functions/strstr.html
strstr()函数应该定位字符串中的第一个匹配项 s1指向字节序列(不包括终止 s2指向的字符串中的空字节。
答案 2 :(得分:0)
你需要等效的strstr,它将适用于一般数组。这是我从你的问题中假设的。你可能没有找到memstr所以你必须自己编写。
这样的事情:
size_t memstr(const unsigned char* arr, size_t length, const unsigned char* tofind, size_t flength) {
for(size_t i = 0; i < length-flength; ++i) {
if(memcmp(arr+i, tofind, flength) == 0)
return i;
}
return -1; //highest possible unsigned value - eg std::string::npos often implemented like this.
}
int main() {
const unsigned char arr1[] = {1,2,3,4,5,6,7,8,9,0,3,3,3,3,4,4,4,4,4};
size_t sz = sizeof(arr1) / sizeof(arr1[0]);
const unsigned char fnd[] = {3,3,3};
size_t where = memstr(arr1, sz, fnd, 3);
return 0;
}