返回

C++代码快速找到字符串中的第一个匹配项,助力编程难题解决

前端

LeetCode 28:字符串匹配难题
LeetCode 28题旨在测试您在C++编程语言中处理字符串匹配任务的能力。该问题如下:

给定两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从 0 开始)。如果needle不是haystack的一部分,则返回 -1。

为了帮助您更好地理解问题,这里提供一个示例:

haystack = "hello"
needle = "ll"
输出:2

在这个示例中,needle字符串"ll"在haystack字符串中第一个匹配项的下标是 2。

C++代码解决方案

我们为您精心准备了完整的C++代码解决方案,以便您轻松实现LeetCode 28题的目标。代码如下:

#include <iostream>
#include <string>

using namespace std;

int strStr(string haystack, string needle) {
  // 判断needle字符串是否为空
  if (needle.empty()) {
    return 0;
  }

  // 遍历haystack字符串
  for (int i = 0; i <= haystack.size() - needle.size(); i++) {
    // 判断当前位置是否匹配needle字符串
    if (haystack.substr(i, needle.size()) == needle) {
      return i;
    }
  }

  // 如果没有找到匹配项,返回 -1
  return -1;
}

int main() {
  // 获取用户输入的haystack和needle字符串
  string haystack, needle;
  cout << "Enter haystack string: ";
  getline(cin, haystack);
  cout << "Enter needle string: ";
  getline(cin, needle);

  // 调用strStr函数查找第一个匹配项的下标
  int index = strStr(haystack, needle);

  // 根据返回结果输出匹配项的下标或提示信息
  if (index == -1) {
    cout << "Needle string not found in haystack string." << endl;
  } else {
    cout << "First matching index: " << index << endl;
  }

  return 0;
}

代码讲解

现在,我们将逐步讲解C++代码的实现细节,帮助您深入理解其工作原理:

  1. 字符串匹配函数strStr的定义

    int strStr(string haystack, string needle) {
      // ...
    }
    

    这个函数接收两个字符串参数haystack和needle,返回needle字符串在haystack字符串中的第一个匹配项的下标。如果needle不是haystack的一部分,则返回 -1。

  2. 检查needle字符串是否为空

    if (needle.empty()) {
      return 0;
    }
    

    如果needle字符串为空,则意味着haystack字符串中没有任何匹配项。因此,我们直接返回 0,表示匹配项从下标 0 开始。

  3. 遍历haystack字符串

    for (int i = 0; i <= haystack.size() - needle.size(); i++) {
      // ...
    }
    

    我们使用一个循环来遍历haystack字符串。循环的条件是i <= haystack.size() - needle.size(),这是为了确保我们在遍历haystack字符串时不会超出范围。

  4. 判断当前位置是否匹配needle字符串

    if (haystack.substr(i, needle.size()) == needle) {
      return i;
    }
    

    在这个循环中,我们使用haystack.substr(i, needle.size())方法来获取haystack字符串从下标i开始的needle字符串大小的子字符串。然后,我们检查这个子字符串是否与needle字符串相等。如果相等,则说明我们找到了needle字符串的第一个匹配项,并立即返回下标i。

  5. 如果没有找到匹配项,返回 -1

    return -1;
    

    如果我们遍历完整个haystack字符串都没有找到needle字符串的匹配项,则返回 -1,表示needle字符串不是haystack字符串的一部分。

  6. 在main函数中获取用户输入并调用strStr函数

    int main() {
      // ...
      int index = strStr(haystack, needle);
      // ...
    }
    

    在main函数中,我们从用户获取haystack和needle字符串,然后调用strStr函数来查找第一个匹配项的下标。

  7. 根据返回结果输出匹配项的下标或提示信息

    if (index == -1) {
      cout << "Needle string not found in haystack string." << endl;
    } else {
      cout << "First matching index: " << index << endl;
    }
    

    最后,我们根据strStr函数返回的结果输出匹配项的下标或提示信息。

结语

希望这份技术指南对您有所帮助。请注意,本文中提供的C++代码仅供参考,您可能需要根据自己的具体情况进行修改或优化。如果您还有其他问题或需要更详细的解释,请随时提出。