我有以下代码:
std::vector<std::string> GetSameID(std::vector<string>& allFiles, int id) {
std::vector<std::string> returnVector;
for(std::vector<string>::iterator it = allFiles.begin(); it != allFiles.end(); ++it) {
if(GetID(*it) == id) {
int index = (*it).find("_CH2.raw");
if(index > 0) {
continue; //this works
}
if(0 < ((*it).find("_CH2.raw"))) {
continue; //this doesn't
}
string ext = PathFindExtension((*it).c_str());
if(ext == ".raw") {
returnVector.push_back(*it);
}
}
}
return returnVector;
}
我的问题是,为什么if(0 < ((*it).find("_CH2.raw")))
无法正常工作?我的文件名为
ID_0_X_0_Y_128_CH1.raw
ID_0_X_0_Y_128_CH2.raw
(示波器上通道1和通道2的ID,X和Y不同。)
当我长途跋涉(分配索引,然后检查索引)时,它可以工作,我不明白为什么短版本,更易读的imo,不起作用。
答案 0 :(得分:12)
根据http://en.cppreference.com/w/cpp/string/basic_string/find,string::find()
会返回size_t
- 这是一种无符号类型 - 因此它永远不会小于零。
当它找不到任何东西时,它返回string::npos
,这也是一个无符号类型,但是当你将它推入一个int(隐式转换它)时它会变成负值 - 这就是为什么你的第一组代码工作。