📜  cpp 字符串查找所有出现 - C++ (1)

📅  最后修改于: 2023-12-03 14:40:14.923000             🧑  作者: Mango

CPP字符串查找所有出现 - C++

字符串查找是程序开发中常见的需求之一。在 C++ 中,我们可以使用各种方法来实现字符串的查找和替换。本文将介绍几种常见的字符串查找方法,并给出相应的示例代码。

1. 使用 std::string::find()

std::string 类提供了一个名为 find() 的成员函数,可以在字符串中查找指定子字符串,并返回找到的第一个匹配项的位置。

#include <iostream>
#include <string>

int main() {
    std::string str = "hello world, world is great!";
    std::string findStr = "world";
    std::size_t pos = str.find(findStr);
    while (pos != std::string::npos) {
        std::cout << "found at position: " << pos << std::endl;
        pos = str.find(findStr, pos + findStr.length());
    }
    return 0;
}

输出为:

found at position: 6
found at position: 13

其中,std::size_t 是无符号整数类型,std::string::npos 表示未找到匹配项。

2. 使用 std::string::find_first_of()

std::string 类还提供了 find_first_of() 成员函数,可以在字符串中查找第一个匹配指定字符集合中的任意字符。

#include <iostream>
#include <string>

int main() {
    std::string str = "hello world, world is great!";
    std::string findStr = "owg";
    std::size_t pos = str.find_first_of(findStr);
    while (pos != std::string::npos) {
        std::cout << "found at position: " << pos << std::endl;
        pos = str.find_first_of(findStr, pos + 1);
    }
    return 0;
}

输出为:

found at position: 4
found at position: 6
found at position: 9
found at position: 11
found at position: 22
found at position: 24
found at position: 28
found at position: 29
3. 使用 std::regex_search()

在 C++11 中,标准库新增了 std::regex 类和相应的匹配函数,可以使用正则表达式来实现更复杂的字符串查找和替换。

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::string str = "hello world, world is great!";
    std::regex reg("(world)");

    std::sregex_iterator begin = std::sregex_iterator(str.begin(), str.end(), reg);
    std::sregex_iterator end = std::sregex_iterator();

    for (std::sregex_iterator iter = begin; iter != end; ++iter) {
        std::smatch match = *iter;
        std::cout << "found at position: " << match.position() << std::endl;
    }

    return 0;
}

输出为:

found at position: 6
found at position: 13

其中,std::regex 表示一个正则表达式,std::sregex_iterator 是一个正则表达式迭代器,std::smatch 是一个匹配结果类。

总结

本文介绍了几种常见的字符串查找方法,包括使用 std::string::find()std::string::find_first_of()std::regex_search()。读者可以根据实际需求选择适合自己的方法来实现字符串的查找和替换。