C++ 使用std::equal查找字符串是否以子字符串开头
你能告诉我我在这里做错了什么吗C++ 使用std::equal查找字符串是否以子字符串开头,c++,string,c++11,C++,String,C++11,你能告诉我我在这里做错了什么吗 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_s
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));
};
这永远是真的
我知道还有很多其他的解决方案,但我想知道这里的错误是什么
编辑:
调试!
另外,我在另一个主文件中尝试了直接输入字符串,结果成功了
编辑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);
我不会使用像
whole\u string
或start\u 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是以=[]开始的(std::string const&source,std::string const&target)
{
return!(source.size()
甚至像
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() );
}
auto是以=[]开始的(std::string const&source,std::string const&target)
{
返回(不是(source.size()
向我们展示一些测试用例,乍一看似乎还可以。在我看来,调试过程的屏幕截图是added@HumamHelfawi完全没有。您的函数是正确的,但看起来太复杂了。