我尝试在字符串中找到特殊部分。
字符串示例如下:
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不起作用。 非常感谢你!
答案 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);