📌  相关文章
📜  c++ 查找字符串中所有出现的索引 - C++ (1)

📅  最后修改于: 2023-12-03 15:29:52.815000             🧑  作者: Mango

C++查找字符串中所有出现的索引

当我们需要在一个字符串中查找某个子串的所有出现位置时,可以使用C++的STL库提供的函数find()和substr()来实现。具体步骤如下:

  1. 定义一个存储所有出现位置的容器,比如vector,用来存储子串在原字符串中出现的索引位置。
  2. 使用STL库函数find()在原字符串中查找第一个子串出现的位置,并记录该位置。
  3. 接着使用substr()函数,在原字符串中截取出第一个子串,并判断截取出的子串是否与目标子串相等。
  4. 如果相等,则将截取出子串在原字符串中的起始位置记录到容器中,并在原字符串中继续查找下一个子串,直到原字符串中不再出现子串。
  5. 返回存储所有出现位置的容器。

以下是示例代码:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

vector<int> findSubstring(string s, string subStr) {
    vector<int> indexes; // 存储所有出现位置
    size_t start = 0; // 起始查找位置

    while (true) {
        size_t index = s.find(subStr, start); // 查找子串位置
        if (index == string::npos) { // 查找完毕
            break;
        }
        indexes.push_back(index); // 记录索引位置
        start = index + 1; // 起始查找位置调整到当前位置+1
    }

    return indexes; // 返回记录的索引位置
}

int main() {
    string s = "This is a test string to test the findSubstring function.";
    string subStr = "test";

    vector<int> indexes = findSubstring(s, subStr);

    cout << "Indexes of \"" << subStr << "\" in \"" << s << "\":";
    for (int i = 0; i < indexes.size(); i++) {
        cout << " " << indexes[i];
    }
    cout << endl;

    return 0;
}

这段代码将在原字符串"This is a test string to test the findSubstring function."中查找子串"test"的所有出现位置,并将它们存储在一个vector容器中。运行结果如下:

Indexes of "test" in "This is a test string to test the findSubstring function.": 10 29

代码片段如下:

vector<int> findSubstring(string s, string subStr) {
    vector<int> indexes; // 存储所有出现位置
    size_t start = 0; // 起始查找位置

    while (true) {
        size_t index = s.find(subStr, start); // 查找子串位置
        if (index == string::npos) { // 查找完毕
            break;
        }
        indexes.push_back(index); // 记录索引位置
        start = index + 1; // 起始查找位置调整到当前位置+1
    }

    return indexes; // 返回记录的索引位置
}