请你指出我在这里做错了什么?
auto is_start_with = [](std::string const& whole_string, std::string const& starting_substring)->bool{
if (starting_substring.size() > whole_string.size()) return false;
return std::equal(begin(starting_substring), end(starting_substring), begin(whole_string));
};
总是回归真实。
我知道还有很多其他解决方案,但我想知道这里的错误是什么。
编辑:
P.S。我在其他主文件中尝试了直接输入字符串,它工作!!
编辑2:
我在比较之前删除了两个降低变换,并且它有效!
std::transform(std::begin(fd_name), std::end(fd_name), std::begin(fd_name), ::tolower);
std::transform(std::begin(type_id), std::end(type_id), std::begin(type_id_lower), ::tolower);
答案 0 :(得分:1)
我不会使用像whole_string
或starting_substring
这样的长标识符。从参数声明中可以清楚地看出lambda处理字符串。名称太长会使代码的可读性降低。
使用通用函数std::begin
和std::end
是没有意义的。 lambda是专门为字符串编写的。
此外,您只能使用一个return语句。例如
auto is_start_with = []( std::string const &source, std::string const &target )
{
return !( source.size() < target.size() ) &&
std::equal( target.begin(), target.end(), source.begin() );
}
甚至喜欢
auto is_start_with = []( std::string const &source, std::string const &target )
{
return ( not ( source.size() < target.size() ) ) &&
std::equal( target.begin(), target.end(), source.begin() );
}