8.11.5 搜索字符串(2)
当然,"Had"与"had"不匹配,因此正确结果为10。
find_first_of()和find_last_of()成员函数在string对象中搜索给定集合中的任何字符。例如,可能在字符串中搜索空格或标点符号(它们可以用来将一个字符串分解为单个单词)。这两个函数都有几个版本,如表8-4所示。表中的所有函数都定义为const,并返回size_t类型的值。
表 8-4
|
函 数
|
说 明
|
|
find_first_of(
char ch,
size_t offset=0)
|
在string对象中搜索从offset索引位置开始第一次
出现的字符ch,并返回发现字符的索引位置值,
类型为size_t。如果省略第二个实参,offset的默认值就为0
|
|
find_first_of(
const char* pstr,
size_t offset=0)
|
在string对象中搜索从offset索引位置开始第一次出
现的以空字符结尾的字符串pstr中的任何字符,并返
回发现字符的索引位置值,类型为size_t。如果省略
第二个实参,offset的默认值就为0
|
|
find_first_of(
const char* pstr,
size_t offset,
size_t count)
|
在string对象中搜索从offset索引位置开始第一次出
现的以空字符结尾的字符串pstr中的前count个字符
中的任何字符,并返回发现字符的索引位置值,类型为size_t
|
|
find_first_of(
const string& str,
size_t offset=0)
|
在string对象中搜索从offset索引位置开始第一次出现的
字符串str中的任何字符,并返回发现字符的索引位置值,
类型为size_t。如果省略第二个实参,offset的默认值就为0
|
|
find_last_of(
char ch,
size_t offset=npos)
|
在string对象中向后搜索从offset索引位置开始最后一次
出现的字符ch,并返回发现该字符的索引位置值,类型
为size_t。如果省略第二个实参,offset的默认值就为字
符串的末尾字符npos
|
|
find_last_of(
const char* pstr,
size_t offset=npos)
|
在string对象中向后搜索从offset索引位置开始最后一次
出现的以空字符结尾的字符串pstr中的任何字符,并返回
发现该字符的索引位置值,类型为size_t。如果省略第二
个实参,offset的默认值就为字符串的末尾字符npos
|
|
find_last_of(
const char* pstr,
size_t offset,
size_t count)
|
在string对象中向后搜索从offset索引位置开始最后一次
出现的以空字符结尾的字符串pstr中的前count个字符,并
返回发现该字符的索引位置值,类型为size_t
|
|
find_last_of(
const string& str,
size_t offset=npos)
|
在string对象中向后搜索从offset索引位置开始最后一
次出现的字符串str中的任何字符,并返回发现该字符
的索引位置值,类型为size_t。如果省略第二个实参,
offset的默认值就为字符串的末尾字符npos
|
对于find_first_of()和find_last_of()函数的所有版本,如果没有发现匹配的字符,就会返回string::npos。
使用与上一个代码片段中相同的字符串,可以看到find_last_of()函数对字符串"had"所执行的搜索。
- size_t count(0);
- size_t offset(string::npos);
- while(true)
- {
- offset = str.find_last_of(substr, offset);
- if(string::npos == offset)
- break;
- --offset;
- ++count;
- }
- cout << endl << " Characters from the string \"" << substr
- << "\" were found " << count << " times in the string above."
- << endl;