gpt4 book ai didi

C++ Palindrome Creator 递归程序

转载 作者:行者123 更新时间:2023-11-28 05:45:20 27 4
gpt4 key购买 nike

#include <iostream>
using namespace std;


void palindrome(char *s){
if (s[1] == 0)
{
return;
}
cout << s[0];
palindrome(++s);
cout << s[0];
}


int main(){
char s[30]="foobar";
palindrome(s);
cout << endl;
}

我必须创建一个递归函数,将任何 cstring 转换为回文。这是一道作业题,我唯一可以修改的代码是在回文函数中。这段代码几乎可以工作。问题是它返回“foobaraboo”并遗漏了最后一个字母。有什么提示可以指出我正确的方向吗?我已经使用代码玩了很长时间,但似乎无法弄清楚如何更改它以便出现回文的最后一个字符。

最佳答案

你的逻辑有两个错误。第一个:

if (s[1] == 0)
{
return;
}

这应该是:

if (*s == 0)
{
return;
}

如果您的整个输入是字符串“x”,您的预期结果是回文“xx”,但此错误将导致打印空字符串。

您还有一个更基本的错误:

cout << s[0];
palindrome(++s);
cout << s[0];

您的目的是打印当前字符,递归打印回文字符串的其余部分,然后重新打印相同的字符。

但是由于++,您第二次打印了错误的字符。

这应该是:

cout << s[0];
palindrome(s+1);
cout << s[0];

编辑:有人提出是否要将最后一个字符打印两次的问题。如果不是,那么这应该是:

cout << s[0];
if (s[1])
{
palindrome(s+1);
cout << s[0];
}

关于C++ Palindrome Creator 递归程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345507/

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