如何在 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/