c++ - 如何在 C++ 中查找字符串中出现的字符串?

标签 c++

如何在 C++ 中查找字符串中出现的字符串?

这是场景。

string base_string = "BF;1;2;3;FF;10;20;30;BF;11;;22;33;FF;100;200;300;BF;110;;220;330;FF;1000;2000;3000";
string to_find_occurances_of = "BF";

最佳答案

int occurrences = 0;
string::size_type start = 0;

while ((start = base_string.find(to_find_occurrences_of, start)) != string::npos) {
    ++occurrences;
    start += to_find_occurrences_of.length(); // see the note
}

string::find 获取要在调用对象中查找的字符串和(在此重载中)开始查找的字符位置,并返回字符串出现的位置,或 string::npos 如果找不到字符串。

变量 start 从 0(第一个字符)开始,在循环条件下,您使用 start 告诉 find 在哪里开始查找,然后将 find 的返回值分配给 start。增加发生次数;现在 start 保存了字符串的位置,您可以跳过 to_find_occurrences_of.length()1 个字符并重新开始查找。


1 drhirsch 指出,如果 to_find_occurrences_of 包含重复的字符序列,则执行 start += to_find_occurrences_of.length() 可能会跳过某些事件。例如,如果 base_string"ffff" 并且 to_find_occurrences_of"ff",那么只有 2 次出现如果您将 to_find_occurrences_of.length() 添加到 start,则计算在内。如果您想避免这种情况,请将 1 而不是 to_find_occurrences_of.length() 添加到 start,在该示例中,将计算 3 次而不是 2 次。

关于c++ - 如何在 C++ 中查找字符串中出现的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614139/

相关文章:

c++ - 传入指定类的成员变量

c++ - 平方根递归

c++ - [Qt][Linux] 列出驱动器或分区

c++ - 使用 const_cast 实现移动构造函数

c++ - 可以在同一个类中重写纯虚函数吗?

c++ - 继承、模板和虚函数(这可能会变得困惑)

c++ - 将容器视为一个容器

c++ - C++ 中的指针和 const

C++:构造函数中的多维数组初始化

c++ - EOF 在 Windows 上并不总是 ^Z?