为什么在非空字符串中查找空字符串会返回0

时间:2015-12-01 11:46:38

标签: c++

我刚注意到string :: find的这种奇怪行为。我有一个非空字符串b和另一个空字符串a。当我调用b.find(a)时,它应返回npos但返回0.

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

int main() {
    // your code goes here
    string a , b("ABC");
    if ( string::npos == b.find(a) ) std::cout << std::endl << "TRUE" << std::endl;
    return 0;
}

上面的代码不能打印出来。有人可以解释一下这意味着什么吗?由于a是空的并且b是非空的,因此在非空中找到空字符串没有意义,因此错误。所以它应该返回npos

由于

1 个答案:

答案 0 :(得分:8)

空字符串是所有字符串的子字符串。存在空子字符串的第一个位置是第一个索引。 {{1}}返回找到第一个子字符串的第一个索引。

如果空子字符串的定义让您感到困惑,请考虑检查字符串是否为子字符串的算法。该算法检查潜在子字符串中的每个字符,并将其与另一个字符串中的相应字符进行比较。如果任何字符不匹配,则它不是子字符串。如果到达搜索到的字符串的末尾,那么它就是匹配。在空字符串的情况下,没有字符可以不同,因为没有字符。立即到达结束,结论是空字符串是子字符串。