gpt4 book ai didi

c++ - 这两个查找回文的函数之间的区别

转载 作者:行者123 更新时间:2023-11-30 00:41:01 25 4
gpt4 key购买 nike

我写了一个函数来检查一个单词是否是回文,但“出乎意料”,那个函数失败得很严重,在这里:

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;
}

当你传入一个只有一个字符的字符串并返回 true 时,它​​会给我“字符串迭代器偏移量超出范围错误”,即使我们传入一个空字符串也是如此(尽管我知道这是因为 reverse 变量的初始化)以及当您传入未分配的字符串时,例如:

string input;
isPalindrome(input);

后来,我发现了一个更好的函数,它的工作原理与你预期的一样:

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;
}

与第一个函数不同,当你给它一个未分配的字符串变量或一个空字符串时,这个函数会正确地失败,并且适用于单个字符等......

所以,stackoverflow 的好心人请给我指出为什么第一个函数这么糟糕...

谢谢。

最佳答案

for (string_sz i = 0; i != original.size(); ++i) {
reverse += original.back();
original.pop_back();
}

original.size() 在您从背面弹出元素时发生变化。实际上,您不断递增 i 并递减 original.size();它们可能永远不相等。

if (reverse == original)

这永远不会是真的,因为您刚刚从 original 中删除了所有元素,并以相反的顺序将它们添加到 reverseoriginal 此时将始终为空。

关于c++ - 这两个查找回文的函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com