小编Moi*_*oin的帖子

找到Palindromes的这两个功能之间的区别

我写了一个函数来检查一个单词是否是回文,但是"意外",该函数失败得非常严重,这里是:

bool isPalindrome (const string& s){
 string reverse = "";
 string original = s;
 for (string_sz i = 0; i != original.size(); ++i){
  reverse += original.back();
  original.pop_back();
 }

 if (reverse == original)
  return true;
 else
  return false;
}
Run Code Online (Sandbox Code Playgroud)

当你传入一个只包含一个字符的字符串时,它给了我"字符串迭代器偏移超出范围错误",即使我们传入一个空字符串(虽然我知道它是因为反向变量的初始化),并且当你传入一个未分配的字符串,例如:

string input;
isPalindrome(input);
Run Code Online (Sandbox Code Playgroud)

后来,我发现了一个更好的功能,它可以像你期望的那样工作:

bool found(const string& s)
{
 bool found = true;
 for (string::const_iterator i = s.begin(), j = s.end() - 1; i < j; ++i, --j) {
  if (*i != *j)
   found = false;
 }
 return found;
}
Run Code Online (Sandbox Code Playgroud)

与第一个函数不同,当您为其指定未分配的字符串变量或空字符串并且适用于单个字符等时,此函数会正确失败... …

c++

1
推荐指数
1
解决办法
922
查看次数

标签 统计

c++ ×1