以下是我的代码块:
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>
只是字符串,cse3
是A5_c
,基于我的研究方法{{1}但是,为什么const array
能够找到一个char数组而找不到字符串?
此外,我还发现buf.find()
实际上返回0.我认为字符串的重载*it == cse3
能够比较字符串和字符串文字。
为什么使用迭代器并解除引用它会产生一个奇怪的行为字符串?
答案 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