在什么情况下 std::basic_string::find 的计数参数大于字符串长度会有用?
In what case std::basic_string::find with a count argument greater than the string length can be useful?
std::basic_string::find
method 的签名之一是:
size_type find( const CharT* s, size_type pos, size_type count ) const;
参数如下:
pos - position at which to start the search
count - length of substring to search for
s - pointer to a character string to search for
此重载方法的行为描述为:
Finds the first substring equal to the range [s, s+count). This range may contain null characters.
我想知道在什么情况下使用包含空字符的范围会很有用。例如:
s.find("A", 0, 2);
这里,s
对应一个长度为1的字符串,因为count
为2,所以[s,s+count)范围内包含一个空字符。重点是什么?
有个假前提你没有拼出来,但是结合题目和问题是:
The null character indicates the end of a std::string
.
这是错误的。 std::string
s 可以在任何位置包含空字符。必须谨慎对待期望以 null 结尾的 c 字符串的函数,但是 find
非常好,它明确地提醒您它也适用于一般情况。
C 字符串以 null 结尾,因此:
std::string x("My[=10=]str0ing[=10=]with[=10=]null[=10=]characters");
std::cout << x.size() << '\n';
打印:2
,即只有[=18=]
之前的字符用于构造std::string
。
然而,这
std::string s("Hello world");
s[5] = '[=11=]';
std::cout << s << '\n';
打印 Helloworld
(因为 [=18=]
不可打印)。 char
数组也可以在任何位置包含 [=18=]
。通常这被解释为字符串的终止字符。然而,由于 std::string
s 可以在任何位置包含空字符,因此提供一个重载也是一致的,该重载采用指向中间可以包含空字符的字符数组的指针。使用该重载的一个示例是(s
是上面的字符串)
std::string f;
f.push_back('[=12=]');
f.push_back('w');
std::cout << s.find(f.c_str()) << '\n';
std::cout << s.find("") << '\n';
std::cout << s.find(f.c_str(),0,2) << '\n';
输出:
0
0
5
没有 count
参数的重载假定一个空终止的 c 字符串,因此 s.find(f.c_str())
与 s.find("")
相同。只有具有 count
参数的重载才会在索引 5.
处找到子字符串 [=30=]w
std::basic_string::find
method 的签名之一是:
size_type find( const CharT* s, size_type pos, size_type count ) const;
参数如下:
pos - position at which to start the search
count - length of substring to search for
s - pointer to a character string to search for
此重载方法的行为描述为:
Finds the first substring equal to the range [s, s+count). This range may contain null characters.
我想知道在什么情况下使用包含空字符的范围会很有用。例如:
s.find("A", 0, 2);
这里,s
对应一个长度为1的字符串,因为count
为2,所以[s,s+count)范围内包含一个空字符。重点是什么?
有个假前提你没有拼出来,但是结合题目和问题是:
The null character indicates the end of a
std::string
.
这是错误的。 std::string
s 可以在任何位置包含空字符。必须谨慎对待期望以 null 结尾的 c 字符串的函数,但是 find
非常好,它明确地提醒您它也适用于一般情况。
C 字符串以 null 结尾,因此:
std::string x("My[=10=]str0ing[=10=]with[=10=]null[=10=]characters");
std::cout << x.size() << '\n';
打印:2
,即只有[=18=]
之前的字符用于构造std::string
。
然而,这
std::string s("Hello world");
s[5] = '[=11=]';
std::cout << s << '\n';
打印 Helloworld
(因为 [=18=]
不可打印)。 char
数组也可以在任何位置包含 [=18=]
。通常这被解释为字符串的终止字符。然而,由于 std::string
s 可以在任何位置包含空字符,因此提供一个重载也是一致的,该重载采用指向中间可以包含空字符的字符数组的指针。使用该重载的一个示例是(s
是上面的字符串)
std::string f;
f.push_back('[=12=]');
f.push_back('w');
std::cout << s.find(f.c_str()) << '\n';
std::cout << s.find("") << '\n';
std::cout << s.find(f.c_str(),0,2) << '\n';
输出:
0
0
5
没有 count
参数的重载假定一个空终止的 c 字符串,因此 s.find(f.c_str())
与 s.find("")
相同。只有具有 count
参数的重载才会在索引 5.
[=30=]w