如何解决比较“Hello”和“olleH”时面临的问题
我正在尝试用 c 编写一个程序,它可以识别一个字符串是否等于它的反向。
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(){
char str1[10] = "Hello";
if (str1 == strrev(str1)){
printf("True");
}
else{
printf("False");
}
getch();
return 0;
}
据我所知,它应该打印 False 但它打印的是 True。任何人都可以解决这个问题。 谢谢
解决方法
函数 strrev
似乎没有创建新的字符数组。它将字符串反转到位。所以在这个 if 语句中
if (str1 == strrev(str1)){
比较了两个指向同一字符数组str1
第一个元素的指针。
要比较两个字符串,请使用标准 C 函数 strcmp
。例如
char str1[10] = "Hello";
char str2[10];
strcpy( str2,str1 );
if ( strcmp( str1,strrev(str2) ) == 0 ){
printf("True");
}
else{
printf("False");
}
,
如果您使用运算符 ==
,您只是将 str1
内存地址指针与其自身进行比较,当然结果是正确的,尽管 strrev
修改了数组.
正如之前的答案已经说过的那样,您应该创建字符数组 str1
的副本,而不是使用 strcmp
来比较两个数组。
我认为值得指出的是,无需创建原始字符串的副本即可检查回文。这将导致代码运行速度更快并使用更少的内存。
#include <stdio.h>
#include <string.h>
int is_palindrome(const char *s) {
int n = strlen(s);
for (int i=0; i < n--; i++) {
if (s[i] != s[n]) return 0;
}
return 1;
}
int main() {
char *s1 = "racehorse";
char *s2 = "racecar";
printf("'%s' %s a palindrome\n",s1,is_palindrome(s1) ? "is" : "is not");
printf("'%s' %s a palindrome\n",s2,is_palindrome(s2) ? "is" : "is not");
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。