我想在某个给定的起始位置之前找到容器中元素的 last 。
例如,如果我试图找到字符串''中给定字符之前的最后一个空格,我相信显而易见的方法就像:
string::const_iterator b;
b = i; // <-- 'i' specifies where to start looking
while ((b != s.begin()) && (b[-1] != ' '))
b--;
使用STL算法有更好的方法吗?
我试过了:
b = find(string::const_reverse_iterator(i),
string::const_reverse_iterator(s.begin()), " ").base();
但我不确定这是否符合预期。
答案 0 :(得分:2)
您可以使用std::string::find_last_of
并指定搜索距离不超过的位置。以下将在单词test之前找到第一个空格的位置。
#include <iostream>
#include <string>
int main()
{
std::string foo = "this is a test string";
auto pos = foo.find_last_of(" ", foo.find("test", 0));
std::cout << pos;
std::cin.get();
return 0;
}
输出:
9
答案 1 :(得分:1)
出于通用目的,我想我会使用具有足够lambda函数的std::find_end。页面上的示例很好地说明了函数的行为。
答案 2 :(得分:0)
反向迭代器解决方案将起作用:
#include <iostream>
#include <algorithm>
int main()
{
using std::string;
using const_iterator = string::const_iterator;
using const_reverse_iterator = string::const_reverse_iterator;
string s("This is an sample");
const_iterator pos = s.begin() + s.find("sample");
const_reverse_iterator result = std::find(const_reverse_iterator(pos), s.crend(), 's');
std::cout << string(s.cbegin(), result.base()) << '\n';
}
但是,您可能更喜欢@NathanOliver的解决方案。