我现在正在学习如何使用c进行编码,因此,我议程中的下一步是学习如何递归进行编码。为此,我尝试编写需要用户输入的代码,然后递归地将其反向并告诉您它是否为palindrome
。
当前的问题编号3,第一个是我是否甚至一直在递归地编写代码,第二个是我在代码的这一部分中必须进行哪个字符串比较以确定它是否为palindrome
或不是:
int main(){
//char stringran[256];
//char done;
char str1[1024];
int size;
printf("Enter a string to reverse, or done to exit program: ");
scanf("%s", str1);
size = strlen(str1);
printf("The string you enterred is: %s\n", str1);
reverse(str1, 0, size - 1);
printf("The string after reversing is: %s\n", str1);
//the if-else statement below is the issue, currently i have a placeholder//
if(str1 == str1){
printf("The string is a palindrome");
}
else{
printf("The string is not a palindrome");
}
最后,如果我希望循环代码,以便在输入字符串(输入要反转的字符串,或完成退出程序的字符串)后不断询问初始问题,我该怎么做呢?是for循环还是while循环?
具有输出的完整代码:
答案 0 :(得分:1)
“当前第3期”
是的,您的reverse()
函数是递归的。任何调用自身的函数都是递归的。但是,编写递归函数操作不正确,不能很好地处理适当的情况,破坏内存管理或无限运行的递归函数非常容易。 C
中的编程需要格外小心;编写递归函数需要更加谨慎。
如评论中所述,不需要检测回文不需要递归函数。作为一种练习,我认为它是可以的,但是(1)如果您确实面对此问题,则最好以完全不同的方式处理它,并且(2)由于存在以下递归问题,因此学习递归要好得多既简单又适合于递归方法。 Google是您的朋友。
您需要做的主要事情是比较两个可能不同的事情。正如评论所指出的,str1 == str1
始终是true
。您指出这是占位符代码(以便进行编译)。更好的占位符代码为:
if (1) { // placeholder code so that it compiles
那会消除很多混乱。
对于您需要进行的比较,只需在修改之前复制str1
。然后,将修改后的副本与修改后的值进行比较。但是,请确保在复制str1
时您知道自己在做什么。由于您尚未意识到需要执行此操作,因此如何对您来说可能并不明显。容易弄错这是C
的陷阱之一。再次,Google将在这里为您提供帮助。
任何一种都行得通,因为编写像for
循环的while
循环很简单。真正的问题是,在什么情况下您会退出循环?该问题的答案将为您指出最佳的循环类型,以及给出循环的条件。