C++字符串find函数的源码
时间: 2024-05-12 13:13:45 浏览: 266
C++中的字符串类`std::string`中的`find`函数有多个版本,这里以标准库版本为例进行介绍。
1. `find(const char* s, size_t pos = 0) const`
此版本的`find`函数用于在字符串中查找第一个出现的指定字符串`s`,并返回该字符串的位置。参数`pos`指定从哪个位置开始查找,如果没有指定,则默认从字符串的开头查找。
下面是该版本的源码:
```c++
size_type find(const char* s, size_type pos = 0) const noexcept {
const size_type size = traits_type::length(s);
return __find_first_of_unchecked(s, pos, size);
}
```
其中,`traits_type::length(s)`表示获取指定字符串`s`的长度,`__find_first_of_unchecked`是一个私有函数,用于在字符串中查找指定字符串的位置。
2. `find(const string& str, size_t pos = 0) const noexcept`
此版本的`find`函数与上一个版本类似,不同之处在于查找的目标变成了另一个字符串`str`。
下面是该版本的源码:
```c++
size_type find(const string& str, size_type pos = 0) const noexcept {
return __find_first_of_unchecked(str.data(), pos, str.size());
}
```
其中,`str.data()`表示获取字符串`str`的首地址,`str.size()`表示获取字符串`str`的长度。
3. `find(char c, size_t pos = 0) const noexcept`
此版本的`find`函数用于在字符串中查找指定字符`c`,并返回该字符的位置。参数`pos`指定从哪个位置开始查找,如果没有指定,则默认从字符串的开头查找。
下面是该版本的源码:
```c++
size_type find(char c, size_type pos = 0) const noexcept {
return __find_first_of_unchecked(&c, pos, 1);
}
```
其中,`&c`表示获取字符`c`的地址,`1`表示查找的长度。
4. `find(const char* s, size_t pos, size_t n) const`
此版本的`find`函数用于在字符串中查找第一个出现的指定字符串`s`的前n个字符,并返回该字符串的位置。参数`pos`指定从哪个位置开始查找,如果没有指定,则默认从字符串的开头查找。
下面是该版本的源码:
```c++
size_type find(const char* s, size_type pos, size_type n) const noexcept {
return __find_first_of_unchecked(s, pos, n);
}
```
其中,`n`表示查找的长度。
5. `find(const char c[], size_t pos, size_t n) const`
此版本的`find`函数用于在字符串中查找第一个出现的指定字符数组`c`的前n个字符,并返回该字符串的位置。参数`pos`指定从哪个位置开始查找,如果没有指定,则默认从字符串的开头查找。
下面是该版本的源码:
```c++
size_type find(const char c[], size_type pos, size_type n) const noexcept {
return __find_first_of_unchecked(c, pos, n);
}
```
其中,`c`表示指定的字符数组,`n`表示查找的长度。
阅读全文