如何在字符串中找到第一次出现的字符串

时间:2013-09-27 18:02:28

标签: c string c99 c89

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

例如

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

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

简而言之:我想要一个传统上称为memstr()的函数。

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

3 个答案:

答案 0 :(得分:1)

由于您使用cc++标记了此问题(这是错误的),我正在利用这一事实来回答它,好像这是一个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;
}