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