string 查找 find_first_of find_last_of
寻找字符的首次出现
std::basic_string<CharT,Traits,Allocator>::find_first_of
寻找等于给定字符序列中字符之一的首个字符。搜索只考虑区间 [pos
, size()) 。若区间中不存在字符,则返回 npos 。
1) 寻找等于 str
中字符之一的首个字符。
size_type find_first_of( const basic_string& str, size_type pos = 0 ) const;
(C++11 前)
size_type find_first_of( const basic_string& str, size_type pos = 0 ) const noexcept;
(C++11 起)
调用示例
// 1) 寻找等于 str 中字符之一的首个字符。
size_t p = str1.find_first_of(str2);
std::cout << "find_first_of str2 : " << p << std::endl;
std::cout << "find_first_of str3 : " << str1.find_first_of(str3, 2)
<< std::endl << std::endl;
2) 寻找等于范围 [s, s+count)
中字符中字符之一的首个字符。此范围能包含空字符。
size_type find_first_of( const CharT* s, size_type pos, size_type count ) const;
调用示例
// 2) 寻找等于范围 [s, s+count) 中字符中字符之一的首个字符。此范围能包含空字符。
p = str1.find_first_of(str2.c_str(), 0, 3);
std::cout << "find_first_of str2 : " << p << std::endl << std::endl;
3) 寻找等于 s
所指向的字符串中字符之一的首个字符。
由首个空字符,用 Traits::length(s)
确定字符串长度。
size_type find_first_of( const CharT* s, size_type pos = 0 ) const;
调用示例
// 3) 寻找等于 s 所指向的字符串中字符之一的首个字符。
// 由首个空字符,用 Traits::length(s) 确定字符串长度。
p = str1.find_first_of(str2.c_str());
std::cout << "find_first_of str2 : " << p << std::endl;
std::cout << "find_first_of str3 : " << str1.find_first_of(str3.c_str(), 2)
<< std::endl << std::endl;
4) 寻找等于 ch
的首个字符。
size_type find_first_of( CharT ch, size_type pos = 0 ) const;
(C++11 前)
size_type find_first_of( CharT ch, size_type pos = 0 ) const noexcept;
(C++11 起)
调用示例
// 4) 寻找等于 ch 的首个字符。
p = str1.find_first_of('i');
std::cout << "find_first_of 'i' : " << p << std::endl;
std::cout << "find_first_of 'j' : " << str1.find_first_of('j', 2)
<< std::endl << std::endl;
参数
str | - | 鉴别要搜索的字符的 string |
pos | - | 搜索开始的位置 |
count | - | 鉴别要搜索的字符的字符串长度 |
s | - | 指向鉴别要搜索的字符的字符串的指针 |
ch | - | 鉴别要搜索的字符的字符 |
返回值
找到的字符的位置,或若找不到这种字符则为 npos 。
寻找字符的最后一次出现
std::basic_string<CharT,Traits,Allocator>::find_last_of
寻找等于给定字符序列中字符之一的最后字符。不指定准确的搜索算法。搜索只考虑区间 [0, pos] 。若区间中不存在这种字符,则返回 npos 。
1) 寻找等于 str
中字符之一的最后字符。
size_type find_last_of( const basic_string& str, size_type pos = npos ) const;
(C++11 前)
size_type find_last_of( const basic_string& str, size_type pos = npos ) const noexcept;
(C++11 起)
调用示例
p = str1.find_last_of(str2);
std::cout << "find_last_of str2 : " << p << std::endl;
std::cout << "find_last_of str3 : " << str1.find_last_of(str3, str1.size() - 2)
<< std::endl << std::endl;
2) 寻找等于范围 [s, s+count)
中字符之一的最后字符。此范围能包含空字符。
size_type find_last_of( const CharT* s, size_type pos, size_type count ) const;
调用示例
// 2) 寻找等于范围 [s, s+count) 中字符之一的最后字符。此范围能包含空字符。
p = str1.find_last_of(str2.c_str(), string::npos, 3);
std::cout << "find_last_of str2 : " << p << std::endl << std::endl;
3) 寻找等于 s
所指向的字符串中字符之一的最后字符。
用 Traits::length(s)
,由首个空字符确定字符串长度。
size_type find_last_of( const CharT* s, size_type pos = npos ) const;
调用示例
// 3) 寻找等于 s 所指向的字符串中字符之一的最后字符。
// 由首个空字符,用 Traits::length(s) 确定字符串长度。
p = str1.find_last_of(str2.c_str());
std::cout << "find_last_of str2 : " << p << std::endl;
std::cout << "find_last_of str3 : "
<< str1.find_last_of(str3.c_str(), str1.size() - 2)
<< std::endl << std::endl;
4) 寻找等于 ch
的最后字符。
size_type find_last_of( CharT ch, size_type pos = npos ) const;
(C++11 前)
size_type find_last_of( CharT ch, size_type pos = npos ) const noexcept;
(C++11 起)
调用示例
// 4) 寻找等于 ch 的最后字符。
p = str1.find_last_of('i');
std::cout << "find_last_of 'i' : " << p << std::endl;
std::cout << "find_last_of 'j' : " << str1.find_last_of('j', str1.size())
<< std::endl << std::endl;
参数
str | - | 鉴别要搜索的字符的 string |
pos | - | 搜索结束的位置 |
count | - | 鉴别要搜索的字符的字符串长度 |
s | - | 指向鉴别要搜索的字符的字符串的指针 |
ch | - | 要搜索的字符 |
返回值
找到的字符位置,或若找不到这种字符则为 npos 。
调用示例
// 寻找字符的首次出现
string str1 = "abcefijklmnnmlkjifecijkfij";
std::cout << "str1 : " << str1 << ",size:" << str1.size() << std::endl;
string str2 = "aijk";
string str3 = "kij";
// 1) 寻找等于 str 中字符之一的首个字符。
size_t p = str1.find_first_of(str2);
std::cout << "find_first_of str2 : " << p << std::endl;
std::cout << "find_first_of str3 : " << str1.find_first_of(str3, 2)
<< std::endl << std::endl;
// 2) 寻找等于范围 [s, s+count) 中字符中字符之一的首个字符。此范围能包含空字符。
p = str1.find_first_of(str2.c_str(), 0, 3);
std::cout << "find_first_of str2 : " << p << std::endl << std::endl;
// 3) 寻找等于 s 所指向的字符串中字符之一的首个字符。
// 由首个空字符,用 Traits::length(s) 确定字符串长度。
p = str1.find_first_of(str2.c_str());
std::cout << "find_first_of str2 : " << p << std::endl;
std::cout << "find_first_of str3 : " << str1.find_first_of(str3.c_str(), 2)
<< std::endl << std::endl;
// 4) 寻找等于 ch 的首个字符。
p = str1.find_first_of('i');
std::cout << "find_first_of 'i' : " << p << std::endl;
std::cout << "find_first_of 'j' : " << str1.find_first_of('j', 2)
<< std::endl << std::endl;
// 寻找字符的最后一次出现
// 1) 寻找等于 str 中字符之一的最后字符。
p = str1.find_last_of(str2);
std::cout << "find_last_of str2 : " << p << std::endl;
std::cout << "find_last_of str3 : " << str1.find_last_of(str3, str1.size() - 2)
<< std::endl << std::endl;
// 2) 寻找等于范围 [s, s+count) 中字符之一的最后字符。此范围能包含空字符。
p = str1.find_last_of(str2.c_str(), string::npos, 3);
std::cout << "find_last_of str2 : " << p << std::endl << std::endl;
// 3) 寻找等于 s 所指向的字符串中字符之一的最后字符。
// 由首个空字符,用 Traits::length(s) 确定字符串长度。
p = str1.find_last_of(str2.c_str());
std::cout << "find_last_of str2 : " << p << std::endl;
std::cout << "find_last_of str3 : "
<< str1.find_last_of(str3.c_str(), str1.size() - 2)
<< std::endl << std::endl;
// 4) 寻找等于 ch 的最后字符。
p = str1.find_last_of('i');
std::cout << "find_last_of 'i' : " << p << std::endl;
std::cout << "find_last_of 'j' : " << str1.find_last_of('j', str1.size())
<< std::endl << std::endl;