[英]Comparing two different strings with the same name in c
我现在正在学习如何用 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 循环?
带输出的完整代码:
“当前问题3”
是的,您的reverse()
函数是递归的。 任何调用自身的函数都是递归的。 然而,很容易编写一个运行不正确、不能很好地处理适当情况、破坏内存管理或无限运行的递归函数。 用C
编程需要非常小心。 编写递归函数需要更加小心。
正如在评论中指出,检测回文不需要递归函数。 作为一个练习,我想这没问题,但是 (1) 如果你真的遇到这个问题,你最好以完全不同的方式来处理它,并且 (2) 学习递归有更好的问题,因为更简单,更适合递归方法。 谷歌是你的朋友。
您需要做的主要事情是比较可能不同的两件事。 正如评论指出str1 == str1
总是true
。 您指出这是占位符代码(以便编译)。 更好的占位符代码是:
if (1) { // placeholder code so that it compiles
这将消除相当多的混乱。
至于需要做的比较,修改前把str1
复制一份就可以了。 然后,将修改前的副本与修改后的值进行比较。 但是请确保您在制作str1
副本时知道自己在做什么。 由于您并不明显需要执行此操作,因此您可能不清楚如何执行此操作。 很容易出错是C
的缺陷之一。 同样,谷歌会在这里帮助你。
两者都可以,因为编写一个类似于while
循环的for
循环是微不足道的。 真正的问题是,在什么情况下你会跳出循环? 该问题的答案将为您指明最佳循环类型和给出它的循环条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.