Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++ I';我在测试代码时遇到了一个奇怪的错误_C++_String_Algorithm_Substr_Function Definition - Fatal编程技术网

C++ I';我在测试代码时遇到了一个奇怪的错误

C++ I';我在测试代码时遇到了一个奇怪的错误,c++,string,algorithm,substr,function-definition,C++,String,Algorithm,Substr,Function Definition,我在codewars.com上做一个练习任务,我已经完成了我的代码并进行了测试。它起作用了,所以我试图把它交上来,但后来我遇到了两个我的代码不起作用的情况。我想纠正我的错误,但我不明白错误/失败的尝试意味着什么 以下是错误的图像: 以下是错误消息: 样本测试案例 捕获的std::exception,what():基本字符串::substr:uu pos(即18446744073709551615)>此->大小()(即3) 随机测试案例 捕获的std::exception,what():基本字符

我在codewars.com上做一个练习任务,我已经完成了我的代码并进行了测试。它起作用了,所以我试图把它交上来,但后来我遇到了两个我的代码不起作用的情况。我想纠正我的错误,但我不明白错误/失败的尝试意味着什么

以下是错误的图像:

以下是错误消息:

样本测试案例
捕获的std::exception,what():基本字符串::substr:uu pos(即18446744073709551615)>此->大小()(即3)
随机测试案例
捕获的std::exception,what():基本字符串::substr:uu pos(即18446744073709551614)>此->大小()(即8)
这是我的代码,如果它完全出了问题:D

bool solution(std::string const &str, std::string const &ending) {
  
  long long end = ending.size(), size = str.size();
  long long dif = size - end;
  string endi = str.substr(dif, end);
  
  if(endi != ending) {
    return false;
  }
  else {
  return true;
    }
}
这里也是我必须完成的任务:

完成解决方案,以便在传入的第一个参数(字符串)以第二个参数(也是字符串)结尾时返回true


请帮我找出问题所在,谢谢

通常,字符串
str
的大小可以小于字符串
结尾的大小

因此,变量
dif
的值可以为负值

long long dif = size - end;
用于调用成员函数
substr

string endi = str.substr(dif, end);
由于函数的第一个参数的类型为无符号整型,因此它使用常用的算术转换转换为大的无符号整数值

该函数可按如下方式编写,如下面的演示程序所示

#include <iostream>
#include <iomanip>
#include <string>
#include <iterator>
#include <algorithm>

bool solution( const std::string &str, const std::string &ending )
{
    return !( str.size() < ending.size() ) && 
           std::equal( std::rbegin( ending ), std::rend( ending ), std::rbegin( str ) ); 
}

int main() 
{
    std::string s( "Hello World!" );
    
    std::cout << std::boolalpha << solution( s, "World!" ) << '\n';
    std::cout << std::boolalpha << solution( s, "World" ) << '\n';

    return 0;
}

通常,字符串
str
的大小可以小于字符串
结尾的大小

因此,变量
dif
的值可以为负值

long long dif = size - end;
用于调用成员函数
substr

string endi = str.substr(dif, end);
由于函数的第一个参数的类型为无符号整型,因此它使用常用的算术转换转换为大的无符号整数值

该函数可按如下方式编写,如下面的演示程序所示

#include <iostream>
#include <iomanip>
#include <string>
#include <iterator>
#include <algorithm>

bool solution( const std::string &str, const std::string &ending )
{
    return !( str.size() < ending.size() ) && 
           std::equal( std::rbegin( ending ), std::rend( ending ), std::rbegin( str ) ); 
}

int main() 
{
    std::string s( "Hello World!" );
    
    std::cout << std::boolalpha << solution( s, "World!" ) << '\n';
    std::cout << std::boolalpha << solution( s, "World" ) << '\n';

    return 0;
}

我认为您需要切换
end=ending.size()
,以及
size=str.size()

我认为您需要切换
end=ending.size()
size=str.size()

如果
结束
str
长怎么办?仅供参考-您不需要创建另一个字符串来查看
str
是否以
结束
结束。如果
结束
str
长怎么办?仅供参考-您不需要创建另一个字符串来查看
str
是否以结束
结束