std::string::find 返回值问题
Posted xingzhensun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std::string::find 返回值问题相关的知识,希望对你有一定的参考价值。
使用std::string 查找find 指定字符串的返回值是size_t类型,这个类型是
unsigned long long
如果使用int 类型来存储返回值的话,查找失败,返回是-1;
如果直接依次来判断是否查找成功的话,可能会出现bug,比如下例:
std::string temp("+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667"); double semiMajorA = 0; if (temp.find("+a=") >= 0) { sscanf(temp.c_str(), "%*[^=]=%lf", &semiMajorA); }
上面的代码中是不存在“+a=”的,按理说是不会执行到sscanf的,但是实际调试中发现,程序会进去执行sscanf。
问题就出在,find的返回值的判断上,由于返回值可能是unsigned类型,所以上述判断出错。
改成以下写法,就没问题了
if (int(temp.find("+a=")) >= 0) { sscanf(res.c_str(), "%*[^=]=%lf", &semiMajorA);
}
以上是关于std::string::find 返回值问题的主要内容,如果未能解决你的问题,请参考以下文章
自己的 std::string::find 实现(蛮力搜索)
C++ std::string::find()函数(在字符串中查找内容)
C++中std::string::find_last_of用法
C++ std::string::find_first_of()函数(在字符串中搜索与其参数中指定的任何字符匹配的第一个字符)