我有一个vector
含有strings
遵循以下格式text_number-number
Eg: Example_45-3
我只想要第一个数字(45
在示例中),并且我无法使用当前代码执行其他操作:
std::vector<std::string> imgNumStrVec;
for(size_t i = 0; i < StrVec.size(); i++){
std::vector<std::string> seglist;
std::stringstream ss(StrVec[i]);
std::string seg, seg2;
while(std::getline(ss, seg, '_')) seglist.push_back(seg);
std::stringstream ss2(seglist[1]);
std::getline(ss2, seg2, '-');
imgNumStrVec.push_back(seg2);
}
有没有更精简、更简单的方法来做到这一点?如果是的话,它们是什么?
我问这个问题纯粹是出于想学习如何更好地编码的愿望,因为最终,上面的代码确实成功地提取了第一个数字,但它看起来很啰嗦和迂回。
您还可以使用内置的find_first_of
and find_first_not_of
查找任何字符串中的第一个“数字字符串”。
std::string first_numberstring(std::string const & str)
{
char const* digits = "0123456789";
std::size_t const n = str.find_first_of(digits);
if (n != std::string::npos)
{
std::size_t const m = str.find_first_not_of(digits, n);
return str.substr(n, m != std::string::npos ? m-n : m);
}
return std::string();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)