c++ string.find()存在多个符合
时间: 2024-02-28 08:29:45 浏览: 401
`string::find()` 方法返回第一个匹配子字符串的位置,如果没有找到则返回 `string::npos`。如果你想查找字符串中所有符合条件的子字符串,可以使用一个循环和 `string::find()` 方法来不断查找。每次找到匹配子字符串后,将其位置加上子字符串长度,然后继续查找下一个匹配子字符串,直到找不到为止。
下面是一个示例代码,可以查找字符串中所有的 `hello` 子字符串:
```c++
#include <iostream>
#include <string>
int main() {
std::string str = "hello world, hello c++, hello python";
std::string sub_str = "hello";
std::size_t pos = str.find(sub_str);
while (pos != std::string::npos) {
std::cout << "Found at position " << pos << std::endl;
pos = str.find(sub_str, pos + sub_str.size());
}
return 0;
}
```
输出结果为:
```
Found at position 0
Found at position 13
Found at position 22
```
相关问题
string.find 函数时间复杂度c++
string.find函数是C++中用于在字符串中查找子串的函数。它的时间复杂度为O(n*m),其中n是原字符串的长度,m是要查找的子串的长度。
具体来说,string.find函数会从原字符串的起始位置开始逐个字符地与子串进行比较,直到找到匹配的子串或者遍历完整个原字符串。在最坏情况下,需要比较的次数为n-m+1次,因此时间复杂度为O(n*m)。
需要注意的是,如果要多次查找同一个子串,可以考虑使用KMP算法等更高效的字符串匹配算法来提高查找效率。
string.contains c++
在C++中,`std::string` 类型并没有直接提供一个名为 `contains` 的成员函数。如果你想检查一个字符串是否包含另一个子串,C++标准库提供的是 `find` 或者 `find_first_of` 函数。
1. `std::string::find`:这个函数返回子串在原字符串中第一次出现的位置(从0开始计数),如果没有找到则返回 `npos`(通常定义为 `std::string::npos`,值为 `std::string::size_type(-1)`)。
```cpp
bool contains(const std::string &substring) {
return find(substring) != npos;
}
```
2. `std::string::find_first_of`:这个函数可以在字符串中查找多个字符中的第一个出现的位置,如果所有字符都不出现,则返回 `npos`。
```cpp
bool contains(const std::string &substring) {
return find_first_of(substring) != npos;
}
```
使用这两个函数时,记得区分大小写,如果需要忽略大小写,可以先将字符串转换为统一的格式再进行比较。
阅读全文