gpt4 book ai didi

c++ - 在 C++0x 中,通常如何获取字符串的结尾?

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:02 26 4
gpt4 key购买 nike

template<typename ForwardIterator, typename StringType>
inline bool starts_with(ForwardIterator begin, ForwardIterator end, const StringType& target)
{
assert(begin < end);
if (std::distance(std::begin(target), std::end(target)) > std::distance(begin, end))
{
return false;
}
return std::equal(std::begin(target), std::end(target), begin);
}

这会失败,因为如果 StringType 是字符串文字,而不是 ,则 std::end 返回 '\0' 之后的一个>'\0'。 (在这方面,它类似于 range based for loop inconsistency)如何解决这个问题?

最佳答案

如何为您的字符串模板参数制作一个小特征类:

template <typename TString>
struct StringBounds
{
typedef typename TString::const_iterator citerator;
static citerator Begin(const TString & s) const { return std::begin(s); }
static citerator End (const TString & s) const { return std::end(s); }
};

template <typename TChar, size_t N>
struct StringBounds<TChar[N]>
{
typedef const TChar * citerator;
static citerator Begin(const TChar(&s)[N]) const { return s; }
static citerator End (const TChar(&s)[N]) const { return s + N - 1; }
};

用法:

std::equal(StringBounds<StringType>::Begin(target), StringBounds<StringType>::End(target), begin)

关于c++ - 在 C++0x 中,通常如何获取字符串的结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6934283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com