更多 C++ 知识:
#include <algorithm>
int getposition(const char *array, size_t size, char c)
{
const char* end = array + size;
const char* match = std::find(array, end, c);
return (end == match)? -1 : (match-array);
}
更多 C++:
template <typename T, size_t N>
int getposition(const T (&array)[N], const T c)
{
const T* match = std::find(array, array+N, c);
return (array+N==match)? -1 : std::distance(array, match);
}
C++11/C++11 额外更新
#include <algorithm>
#include <iterator>
template <typename Range, typename T>
size_t index_of(Range const& range, T const& c) {
using std::begin;
using std::end;
auto b = begin(range), e = end(range);
auto match = std::find(b, e, c);
return (e==match)? -1 : std::distance(b, match);
}
C++17 额外更新
在这里,原来的问题得到了直接支持std::string_view
:
Live On Coliru http://coliru.stacked-crooked.com/a/ac18c3aadaae28e6
#include <string_view>
using namespace std::string_view_literals;
int main() {
return "hello"sv.find('e');
}