0

我需要一个像 memchr() 这样的函数,但它应该能够找到一个子字符串(字符串),而不仅仅是一个字符。 它应该返回在字符串中找到的第一个匹配项。

例如

p1 = afunclikememchr(str1,"here the function that can locate this substring",200);

对于 mods:我添加了 C++ 标签,因为这也与 C++ 有关

简而言之:我想要一个memstr()按惯例调用的函数。

另外,我必须使用 C 标准库,而不是 C++,并且函数在找到一个'\0'字节时不应该停止。

4

3 回答 3

0

既然你用cand标记了这个问题c++(这是错误的),我正在利用这个事实来回答它,就好像它是一个 C 问题一样(我不知道它是否真的是):

所以你正在寻找memstr()不是标准功能的东西,但我在这里有一个实现。

或者只使用 GNU extension memmem(),如果可用并且您不介意非标准。

于 2013-09-27T18:09:58.200 回答
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;
}
于 2013-09-27T19:13:15.363 回答
0

你考虑过 strstr() 吗?

http://pubs.opengroup.org/onlinepubs/009695399/functions/strstr.html

strstr() 函数应在 s2 指向的字符串中定位字节序列(不包括终止空字节)在 s1 指向的字符串中的第一次出现。

于 2013-09-27T18:05:31.100 回答