8.11.5 搜索字符串(3)
这次从字符串末尾索引位置string::npos开始后向搜索,因为这是默认开始位置。该代码片段的输出为:
- The string to be searched is:
- Smith, where Jones had had "had had", "had had" had. "Had had" had had
- the examiners' approval.
- Characters from the string "had" were found 38 times in the string above.
结果应当不出意料。记住,我们正在搜索字符串str中出现的"had"中的任何字符。"Had"和"had"单词中有32个,其他单词中有6个。因为我们在沿着字符串后向搜索,因此当发现一个字符时,递减循环内的offset。
最后一组搜索函数是find_first_not_of()和find_last_not_of()函数的各个版本,如表8-5所示。表中的所有函数都定义为const,并返回size_t类型的值。
表 8-5
|
函 数
|
说 明
|
|
find_first_not_of(
char ch,
size_t offset=0)
|
在string对象中搜索从offset索引位置开始第
一次出现的不是字符ch的字符,并返回发现
字符的索引位置值,类型为size_t。如果省略第
二个实参,offset的默认值就为0
|
|
find_first_not_of(
const char* pstr,
size_t offset=0)
|
在string对象中搜索从offset索引位置开始第一
次出现的不在以空字符结尾的字符串pstr中
的字符,并返回发现字符的索引位置值,类型为
size_t。如果省略第二个实参,offset的默认值就为0
|
|
find_first_not_of(
const char* pstr,
size_t offset,
size_t count)
|
在string对象中搜索从offset索引位置开始第一次
出现的不在以空字符结尾的字符串pstr中的前count
个字符中的任何字符,并返回发现字符的索引位置值,类型为size_t
|
|
find_first_not_of(
const string& str,
size_t offset=0)
|
在string对象中搜索从offset索引位置开始第一次
出现的不在字符串str中的任何字符,并返回发现字
符的索引位置值,类型为size_t。如果省略第二个实
参,offset的默认值就为0
|
|
find_last_not_of(
char ch,
size_t offset=npos)
|
在string对象中向后搜索从offset索引位置开始最后
一次出现的不是字符ch的字符,并返回发现该字符
的索引位置值,类型为size_t。如果省略第二个实参,
offset的默认值就为字符串的末尾字符npos
|
(续表)
|
函 数
|
说 明
|
|
find_last_not_of(
const char* pstr,
size_t offset=npos)
|
在string对象中向后搜索从offset索引位置开始
最后一次出现的不在以空字符结尾的字符串pstr
中的任何字符,并返回发现该字符的索引位置值,
类型为size_t。如果省略第二个实参,offset的默认值
就为字符串的末尾字符npos
|
|
find_last_not_of(
const char* pstr,
size_t offset,
size_t count)
|
在string对象中向后搜索从offset索引位置开始最后
一次出现的不在以空字符结尾的字符串pstr中的前
count个字符中的字符。该函数返回发现该字符的索
引位置值,类型为size_t
|
|
find_last_not_of(
const string& str,
size_t offset=npos)
|
在string对象中向后搜索从offset索引位置开始最
后一次出现的不在字符串str中的任何字符,并返
回发现该字符的索引位置值,类型为size_t。如果
省略第二个实参,offset的默认值就为字符
的末尾字符npos
|
对于前面的这些搜索函数,如果没有搜索到匹配的字符,那么将返回string::npos。这些函数有很多用法,通常用来在字符串中查找可能由各种字符隔开的令牌(token)。例如,用空格和标点符号隔开的单词组成的文本,因此,可以用这些函数在文本块中查找单词。下面举例说明其工作过程。