std中有没有像find_last_of这样的函数,但string中没有?

问题描述 投票:0回答:4

我知道有功能

string::find_last_of

但是我想处理一大块 char* 数据。我不想将 char* 分配给字符串。

我知道有一个std函数

std::find

但它只能找到正序上的 char* 。有没有这样的方法可以逆序查找? 如果不在 std 中,有没有在 boost 中的方法?

c++ std
4个回答
3
投票

std::find_end()

搜索 [first, last) 范围内元素的最后一个子序列 [s_first, s_last)。

例如

#include <algorithm>

char *data = ...;
char *data_end = data + size;
char toFind = ...;
char *pfind = &toFind;

char *found = std::find_end(data, data_end, pfind, pfind + 1);
if (found != data_end)
    ...

2
投票

如果你想搜索一个字符,就像

std::find()
一样,你可以使用...
std::find()
。看看
std::reverse_iterator

auto foo(char* str, std::size_t size, char to_find)
{
    auto rev_it = std::find(std::make_reverse_iterator(str + size),
                            std::make_reverse_iterator(str),
                            to_find);
    auto it = std::make_reverse_iterator(rev_it);

}

1
投票

boost中有一个功能可以解决这个问题。

boost::algorithm::find_last

示例:

char* s = "abcdabc";
cout << boost::algorithm::find_last(s, "b").begin() - s;

0
投票

对于单字符搜索,现在有

std::ranges::find_last
(不幸的是仅在 C++23 中;并且没有
std::find_last
对应项)

https://en.cppreference.com/w/cpp/algorithm/ranges/find_last

示例:

#include<algorithm>
#include<vector>
#include<cassert>

...

std::vector<char> str{ '1','2','2','3','4' };
auto find = std::ranges::find_last(str.begin(), str.end(), '2'); // [last '2', str.end())
assert(find.begin() == str.begin() + 2 && find.end() == str.end());
© www.soinside.com 2019 - 2024. All rights reserved.