在字符串

时间:2015-08-30 15:35:52

标签: c++ string

我尝试在字符串中找到特殊部分。 字符串示例如下: 22.21594087,1.688530832,0

我想找到1.688530832。 我试过了

temp.substr(temp.find(",")+1,temp.rfind(","));

得到1.688530832,0。 我用find_last_of()替换了rfind()但仍然得到了相同的结果。

temp.substr(temp.find(",")+1,temp.find_last_of(","));

我知道这是一个简单的问题,还有其他解决方案。但我只是想知道为什么rfind不起作用。 非常感谢你!

2 个答案:

答案 0 :(得分:2)

substr的第二个参数不是结束索引,而是所需子字符串的长度。只需按1.688530832的长度即可,你就可以了。

如果搜索字符串的长度不可用,则可以找到最后一个逗号的位置,并从特殊单词的第一个字符的位置中减去该位置:

auto beginning_index = temp.find(",") + 1;
auto last_comma_index = temp.rfind(",");
temp.substr(beginning_index, last_comma_index - beginning_index);

答案 1 :(得分:0)

我明白你在做什么。您正在尝试将一些迭代器用于子字符串的开头和结尾。不幸的是,substr不能以这种方式工作,而是期望索引和偏离来选择子字符串。

您尝试实现的目标可以使用std::find完成,它可以与迭代器一起使用:

auto a = std::next(std::find(begin(temp), end(temp), ','));
auto b = std::next(std::find(rbegin(temp), rend(temp), ',')).base();
std::cout << std::string(a, b);

Live demo