【发布时间】:2015-05-06 10:16:10
【问题描述】:
我有一个 vector 包含 strings 遵循 text_number-number 的格式
例如: 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);
}
有没有更精简和更简单的方法来做到这一点?如果有,它们是什么?
我问这个问题纯粹是为了学习如何更好地编码,因为在一天结束时,上面的代码确实成功地提取了第一个数字,但它似乎冗长而迂回。
【问题讨论】:
-
你考虑过正则表达式吗?
-
@senfen 我同意。如果没有性能限制(即每秒一千万次),只需使用one line regex。
-
@Trevor Boyd Smith,如果我们必须解析每秒百万次的流也是一个坏主意:)
-
感谢您解决家庭作业问题...下次查找documentation。都在那里。
-
@rr- 我实际上是在自学,所以如果这个简单的问题惹恼了你,我很抱歉,但在这周之前我之前没有任何知识(由上面冗长的代码),我觉得我应该问。
标签: c++ string stringstream