温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c++ - I'm getting this weird error when testing my code
algorithm c++ function-definition string substr

c++ - 测试我的代码时出现这个奇怪的错误

发布于 2021-03-26 20:02:21

我正在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;
    }
}

这也是我必须要做的任务:

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

请帮助我找出这里的问题,谢谢!

查看更多

提问者
richiE
被浏览
55
Vlad from Moscow 2020-10-07 04:33

通常,字符串的大小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