微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较“Hello”和“olleH”时面临的问题

如何解决比较“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 举报,一经查实,本站将立刻删除。