测试我的代码时出现这个奇怪的错误
I'm getting this weird error when testing my code
我在 codewars.com 上做练习任务,我已经完成了我的代码并对其进行了测试。它起作用了,所以我试图将其上交,但后来我遇到了 2 个我的代码不起作用的情况。我想改正我的错误,但我不明白错误/尝试失败的含义。
这是错误的图片:
错误信息如下:
Sample_Test_Cases
Caught std::exception, what(): basic_string::substr: __pos (which is 18446744073709551615) > this->size() (which is 3)
Random_Test_Cases
Caught std::exception, what(): basic_string::substr: __pos (which is 18446744073709551614) > this->size() (which is 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;
}
}
还有我必须做的任务:
完成解决方案,如果传入的第一个参数(字符串)以第二个参数(也是一个字符串)结尾,它 returns 为真。
请帮我看看这里有什么问题,谢谢!
一般情况下字符串str
的大小可以小于字符串ending
的大小。
因此变量dif
的值可以为负
long long dif = size - end;
用于成员函数的调用substr
string endi = str.substr(dif, end);
由于函数的第一个参数的类型 std::string::size_type
是无符号整数类型,因此使用通常的算术转换将其转换为大的无符号整数值。
函数可以这样写,如下面的演示程序所示。
#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;
}
程序输出为
true
false
我认为你需要切换 end = ending.size()
和 size = str.size();
。
我在 codewars.com 上做练习任务,我已经完成了我的代码并对其进行了测试。它起作用了,所以我试图将其上交,但后来我遇到了 2 个我的代码不起作用的情况。我想改正我的错误,但我不明白错误/尝试失败的含义。
这是错误的图片:
错误信息如下:
Sample_Test_Cases
Caught std::exception, what(): basic_string::substr: __pos (which is 18446744073709551615) > this->size() (which is 3)
Random_Test_Cases
Caught std::exception, what(): basic_string::substr: __pos (which is 18446744073709551614) > this->size() (which is 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;
}
}
还有我必须做的任务:
完成解决方案,如果传入的第一个参数(字符串)以第二个参数(也是一个字符串)结尾,它 returns 为真。
请帮我看看这里有什么问题,谢谢!
一般情况下字符串str
的大小可以小于字符串ending
的大小。
因此变量dif
的值可以为负
long long dif = size - end;
用于成员函数的调用substr
string endi = str.substr(dif, end);
由于函数的第一个参数的类型 std::string::size_type
是无符号整数类型,因此使用通常的算术转换将其转换为大的无符号整数值。
函数可以这样写,如下面的演示程序所示。
#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;
}
程序输出为
true
false
我认为你需要切换 end = ending.size()
和 size = str.size();
。