我刚刚注意到string :: find的这种奇怪行为.我有一个非空字符串b和另一个空字符串a.当我调用b.find(a)时,它应返回npos但返回0.
#include#include 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
谢谢
空字符串是所有字符串的子字符串.存在空子字符串的第一个位置是第一个索引.find
返回找到第一个子字符串的第一个索引.
如果空子字符串的定义让您感到困惑,请考虑检查字符串是否为子字符串的算法.该算法检查潜在子字符串中的每个字符,并将其与另一个字符串中的相应字符进行比较.如果任何字符不匹配,则它不是子字符串.如果到达搜索到的字符串的末尾,那么它就是匹配.在空字符串的情况下,没有字符可以不同,因为没有字符.立即到达结束,结论是空字符串是子字符串.