21xrx.com
2025-03-24 20:17:16 Monday
文章检索 我的文章 写文章
手写实现strstr函数,不使用C/C++字符串库函数
2023-07-01 13:12:14 深夜i     11     0
手写 strstr函数 不使用 C/C++ 字符串库函数

在C/C++程序中,strstr()函数是用来找出一个字符串中是否包含了另一个字符串,如果包含,则返回该字符串的位置。但是,如果不使用C/C++字符串库函数,我们该如何手写实现strstr()函数呢?

首先,我们需要明确strstr()函数的功能:它是在一个字符串中查找另一个字符串,并返回该字符串的位置。因此,我们可以采用暴力匹配的思路来实现该函数。

具体实现方法如下:

1. 判断两个字符串的长度

我们需要判断要查找的字符串是否比被查找的字符串长,如果找不到该字符串则返回NULL。

2. 逐个比较字符

我们可以采用两个循环来逐个比较两个字符串中的字符。首先,我们在被查找的字符串中找到第一个与要查找的字符串中的第一个字符相同的位置。然后,我们在这个位置之后继续比较两个字符串中的字符。

3. 判断是否匹配成功

在比较的过程中,我们需要逐个判断两个字符串中的字符是否相等,如果不相等,则说明匹配失败,要从被查找字符串的下一个位置开始继续查找,直到找到一个匹配成功的位置为止。

4. 返回匹配成功的位置

如果成功匹配,则返回该位置,如果找不到该字符串,则返回NULL。

下面是具体的代码实现:

char* my_strstr(char* str, const char* target) {
  // 判断两个字符串的长度
  int len_str = strlen(str);
  int len_target = strlen(target);
  if (len_str < len_target)
    return NULL;
  
  // 逐个比较字符
  for (int i = 0; i <= len_str - len_target; i++) {
    int j;
    for (j = 0; j < len_target; j++) {
      // 判断是否匹配成功
      if (str[i + j] != target[j])
        break;
      
    }
    if (j == len_target) {
      // 返回匹配成功的位置
      return &str[i];
    }
  }
  // 找不到该字符串
  return NULL;
}

总结:

手写实现strstr()函数虽然比使用库函数要麻烦一些,但对于理解字符串匹配算法的原理和实现有很大的帮助。实际上,在C/C++程序中,字符串匹配算法有很多种,比如暴力匹配算法、KMP算法、BM算法等,每种算法都有其优点和适用场景,具体使用哪种算法取决于实际情况。

  
  

评论区

请求出错了