Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::equal查找字符串是否以子字符串开头_C++_String_C++11 - Fatal编程技术网

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完全没有。您的函数是正确的,但看起来太复杂了。