std :: string :: find为dereferenced iterator和等效的字符串文字返回不同的值

时间:2018-06-12 07:34:14

标签: c++

以下是我的代码块:

for (auto it = name.begin(); it != name.end(); it++) {
    cout << "\n" << "Fetching " << *it;
    cout << int(buf.find("cse3")) << "\n";
    cout << int(buf.find(*it)) << "\n";
    if (buf.find(*it) == string::npos) {
        cout << "No description for " << *it;
        cout << "In " << buf;
    } else if ...
...
}

,其中

vector<string> name = ...; 
string buf = ...;

这是我得到的输出

Fetching cse3
0
-1
No description for cse3
In cse3" name="cse3"

我尝试查找类型,*it提供的basic_string<char>只是字符串,cse3A5_c,基于我的研究方法{{1}但是,为什么const array能够找到一个char数组而找不到字符串?

此外,我还发现buf.find()实际上返回0.我认为字符串的重载*it == cse3能够比较字符串和字符串文字。

为什么使用迭代器并解除引用它会产生一个奇怪的行为字符串?

1 个答案:

答案 0 :(得分:3)

正如您所看到的,在Fetching cse3之后有一个换行符,它不在您的代码中。这意味着向量中的字符串实际上是cse3\n,因此找不到它。

basic_string::find没有问题,这是一个演示:

#include <string>
#include <vector>

using namespace std;

int main() {
    vector<string> vec = { "abc", "abc\n" };
    string s = "abcdef";
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        cout << static_cast<int>(s.find(*it)) << endl;
    }
}

输出:

0
-1