如何使用字符串find_first_of缓冲区形式(size_t n参数)

时间:2018-10-19 15:28:07

标签: c++ string

我了解find_first_of其他形式的用法,但是我一生无法弄清楚(或找到答案)如何使用此函数的第三种形式(缓冲区?)。 “ size_t n”参数有什么作用?文档指出,这是要搜索的字符值的数量,但这意味着什么?字符串中出现的次数,要搜索的不同字符的数量?从原始字符串还是要搜索的字符串开始的位置?

2 个答案:

答案 0 :(得分:0)

我认为您的意思是超载

size_type find_first_of(const CharT* s, size_type pos, size_type count)

  

“ size_t n”参数有什么作用?

第三个参数只是第一个参数所指向的缓冲区的长度。缓冲区必须至少与n一样长。它可以更长一些,但是不会搜索第一个n之后的字符。

答案 1 :(得分:0)

取自std::string::find_first_of() of cplusplus.com,因为该声明似乎是您要搜索的声明...但是请相信我,不要从那里获取文档...使用其他可靠的站点,例如{{3} }明确定义了每个函数和参数的作用...


该网站上成员函数的第三声明是  来自cppreference的第二个声明,来自cppreference的函数的声明如下:

size_type find_first_of( const CharT* s, size_type pos, size_type count ) const;
  

注意:

     

在甚至不知道如何 find_first_of的声明之前,我们必须知道如何的工作原理...

     
    

使用find_first_of函数的en.cppreference.com定义:

         

“查找与给定字符序列中的一个字符相等的第一个字符。搜索仅考虑间隔[pos,size())。如果该间隔中不存在该字符,则将返回npos。”

  
     

可以解释为以下内容:

     

1)此处的缓冲区就像一个字符数组,此函数的作用是单独检查字符串中的所有字符...

     

2)换句话说,它分别使用字符串的所有字符在缓冲区上进行迭代...

     

3)第三个​​参数,只是一个需要找到长度的参数...主要情况是当您懒于执行std::string::substr()时。 。   


  例如: some_str.find_first_of("this_will_be_found", 10, 5) ...

     

此行将检查所有单个字符,直到5个字符为止,因为计数为 5 't''h''i',{ {1}},'s' ...在那里,...其中5个!)位于索引{10中的'_' 内。 ..(请注意,索引从0开始,而不是1 ...)

现在,为了不让您感到无聊,这是声明的说明(最后!):

在这里, find_first_of 是一个重载函数,其给定的声明之一如上所示……

1) some_str只是无符号整数,通常用作大小的类型,因为无符号整数不能具有负值,零(0)除外,它是允许的正负数字...

2) size_type显然是const CharT* s,因为字符串是const char* s(字符串的字符串缓冲区,另外 std::string或使用wchar_t代替unsigned short来输入宽字符串char)...

3) std::wstring,就像您可能已经猜到的一样,是该函数应开始查找的起点...

4) pos也是一个无符号的int(一个不允许小于零的值,即负数...),它只是一个定义如何缓冲区中有很多字符要查找...因为find_first_of单独搜索所有字符,而不是一次搜索一个缓冲区...

5)最后,该函数是一个恒定函数,即它具有一个count说明符,并且不会参与修改任何类型的变量...期望cppreference's std::find_first_of() s ...