设为首页 加入收藏

TOP

8.8.5 搜索字符串(1)
2013-10-07 12:37:19 来源: 作者: 【 】 浏览:63
Tags:8.8.5 搜索 字符串

8.8.5  搜索字符串(1)

搜索给定字符或子串的string对象的find()函数有4个版本,分别列出在表8-3中。

表  8-3

    < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   

size_t find(char ch,

size_t offset=0)

string对象中搜索从offset

索引位置开始的字符ch。可以

省略第二个实参,在这种情况下

默认值为0

size_t find(char char* pstr,

size_t offset=0)

string对象中搜索从offset

索引位置开始的以空字符结尾的

字符串pstr。可以省略第二个实参,

在这种情况下默认值为0

size_t find(char char* pstr,

size_t offset,

size_t count)

string对象中搜索从offset索引

位置开始的以空字符结尾的字符串

pstr的前count个字符

size_t find(const string str,

size_t offset=0)

string对象中搜索从offset索引

位置开始的字符串对象str。可以

省略第二个实参,在这种情况

下默认值为0

find()函数的各个版本都返回发现字符或子串的第一个字符的索引位置。如果没有找到要找的条目,该函数会返回值string::npos。后一个值是在string类中定义的一个常量,表示string对象中的一个非法位置,它通常用来标识搜索失败。

下面的代码片段显示了find()函数的部分用法:

  1. 下面的代码片段显示了find()函数的部分用法:  
  2.  
  3. string phrase("So near and yet so far");  
  4. string str("So near");  
  5. cout << phrase.find(str) << endl;           // Outputs 0  
  6. cout << phrase.find("so far") << endl;// Outputs 16  
  7. cout << phrase.find("so near") << endl;       
    // Outputs 
    string::npos = 4294967295 

string::nops的值可能根据不同的C++(www.cppentry.com)编译器实现而不同,因此,为了测试它,我们应总是使用string::npos,而不是使用显式的值。

下面是反复扫描同一个字符串以搜索出现的特定子串的又一示例:

  1. string str( "Smith, where Jones had had \"had had\", \"had had\" had."  
  2. " \"Had had\" had had the examiners' approval.");  
  3. string substr("had");  
  4.  
  5. cout << "The string to be searched is:"  
  6. << endl << str << endl;  
  7. size_t offset = 0;  
  8. size_t count = 0;  
  9. size_t increment = substr.length();  
  10.  
  11. while(true)  
  12. {  
  13. offset = str.find(substr, offset);  
  14. if(offset == string::npos)  
  15. break;  
  16. offset += increment;  
  17. ++count;  
  18. }  
  19. cout << endl << " The string \"" << substr 
  20. << "\" was found " << count << " times in the string above."  
  21. << endl

在这段代码中,我们搜索str,查看其中出现"had"的次数。此搜索在while循环中完成,其中offset记录发现的位置,该位置也用作搜索的起始位置。该搜索从索引位置0(字符串的开头)开始,每次发现子串时,就将下一次搜索的新起始位置设置为发现的位置加上子串的长度。这样可以确保绕过发现的子串。每次发现子串时,计数就递增。如果find()返回string::npos,就表示没有发现子串,搜索结束。执行该代码片段产生如下输出:

  1. The string to be searched is:  
  2. Smith, where Jones had had "had had", "had had" had. "Had had" had had  
  3. the examiners' approval.  
  4.  
  5. The string "had" was found 10 times in the string above. 

当然,"Had"与"had"不匹配,因此正确结果为10。

find_first_of()和find_last_of()成员函数在string对象中搜索出现的给定集合中的任何字符。例如,我们可能在字符串中搜索空格或标点符号(它们可以用来将一个字符串分解为单个单词)。这两个函数都有几个版本,如表8-4所示。

表  8-4

   

   

find_first_of(char ch,

size_t offset=0)

string对象中搜索从offset

引位置开始出现的字符ch,并返

回发现字符的索引位置值,类型为

size_t。如果省略第二个实参,

offset的默认值就为0

find_first_of(char* pstr,

size_t offset=0)

string对象中搜索从offset索引

位置开始第一次出现的以空字符结

尾的字符串pstring中的任何字符,

并返回发现字符的索引位置值,类型

size_t。如果省略第二个实参,

offset的默认值就为0

find_first_of(char* pstr,

         size_t offset,

size_t count)

string对象中搜索从offset索引位

置开始第一次出现的以空字符结尾的

字符串pstring中的前count个字符中

的任何字符,并返回发现字符的索引

位置值,类型为size_t

find_first_of(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的默认值就为字符串的末尾字符nops


(续表)

   

   

find_last_of(char* pstr,

size_t offset=npos)

string对象中向后搜索从offset

索引位置开始最后一次出现的以空

字符结尾的字符串pstr中的任何字符,

并返回发现该字符的索引位置值,类

型为size_t。如果省略第二个实参,

offset的默认值就为字符串的末尾字符nops

find_last_of(char* pstr,

size_t offset,

size_t count)

string对象中向后搜索从offset索引

位置开始最后一次出现的以空字符结

尾的字符串pstr中的前count个字符,

并返回发现该字符的索引位置值,

类型为size_t

find_last_of(string str,

size_t offset=npos)

string对象中向后搜索从offset索引

位置开始最后一次出现的字符串str

的任何字符,并返回发现该字符的索引

位置值,类型为size_t。如果省略

第二个实参,offset的默认值就为字

符串的末尾字符npos

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.8.5 搜索字符串(2) 下一篇8.9 C++/CLI编程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: