空字符串在C++中是否包含空字符串?

Ole*_*siy 4 c++ string portability text-processing contains

我对其中一个问题的评论中有一个有趣的论点.我的对手声称声明""没有包含""错误.

我的理由是,如果""包含另一个"",那个也包含"",依此类推.

谁错了?

PS

我在说一个 std::string

私人参建居屋

我不是在谈论子串,但即使我将我的问题"添加为子串",它仍然没有意义.空子字符串是无意义的.如果允许空字符串包含在字符串中,则意味着您具有无限的空子字符串.那是什么意思?

编辑:

我是唯一认为这个功能有问题的人std::string::find吗?

C++参考清楚地说

返回值:第一个匹配的第一个字符的位置.

好吧,让我们假设一分钟有意义并运行此代码:

string empty1 = "";
string empty2 = "";

int postition = empty1.find(empty2);

cout << "found \"\" at index " << position << endl;
Run Code Online (Sandbox Code Playgroud)

输出是: found "" at index 0

无意义部分:如何在长度为0的字符串中存在索引0?这是无稽之谈.

为了能够甚至一个零位置,该字符串必须至少为1个字符长.

在这种情况下C++给出了一个例外,这证明了我的观点:

cout << empty2.at( empty1.find(empty2) ) << endl;
Run Code Online (Sandbox Code Playgroud)

如果它真的包含一个空字符串,那么将其打印出来就没问题了.

mol*_*ilo 15

这取决于你所说的"包含".

空字符串是空字符串的字符串,因此包含在那个意义上.

另一方面,如果将字符串视为字符集合,则空字符串不能包含空字符串,因为其元素是字符,而不是字符串.

关于集合,集合

{2}
Run Code Online (Sandbox Code Playgroud)

集合的子

A = {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

{2}不是会员A-所有A的成员是数字,而不是套.

以同样的方式,{}是一个子集{},但{}不是一个元素{}(它不能是因为它是空的).

所以你们都是对的.


jro*_*rok 7

C++同意你的"对手":

#include <iostream>
#include <string>
using namespace std;

int main()
{
    bool contains = string("").find(string("")) != string::npos;
    cout << "\"\" contains \"\": "
        << boolalpha << contains;
}
Run Code Online (Sandbox Code Playgroud)

输出: "" contains "": true

演示


MSa*_*ers 5

这很容易。如果存在offset这样的参数,则字符串 A 包含子字符串 B A.substr(offset, B.size()) == B。不需要空字符串的特殊情况。

那么,让我们看看。std::string("").substr(0,0)原来是std::string("")。我们甚至可以检查你的“反例”。std::string("").substr(0,0).substr(0,0)也是明确的和空的。海龟一路下来。