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

为什么当一个字符数组和另一个字符数组比较时,输出是错误的,而当字符数组和字符串比较时,输出是正确的?

如何解决为什么当一个字符数组和另一个字符数组比较时,输出是错误的,而当字符数组和字符串比较时,输出是正确的?

问题 - 从 Berland 语言翻译成 Birland 语言并非易事。这些语言非常相似:berlandish 词与具有相同含义的 birlandish 词略有不同:它的拼写(和发音)相反。例如,Berlandish 字代码对应于 Birlandish 字 edoc。但是,在“翻译”过程中很容易出错。 Vasya 将单词 s 从 Berlandish 翻译成 Birlandish 作为 t。帮助他:找出他是否正确翻译了这个词。

输入 - 第一行包含单词 s,第二行包含单词 t。单词由小写拉丁字母组成。输入数据不包含不必要的空格。单词不为空,长度不超过100个符号。

输出 - 如果单词 t 是单词 s,反写,则打印 YES,否则打印 NO。

当我写这段代码时,输​​出是错误的-

int main(){
    char s[100000],a[100000];
    cin >> s >> a;
    strrev(s);
    if(s==a){
        cout << "YES";
    }else{cout << "NO";}
}

但是当我写这段代码时,输​​出是正确的 -

int main(){
    char s[100000];
    string a;
    cin >> s >> a;
    strrev(s);
    if(s==a){
        cout << "YES";
    }else{cout << "NO";}
}

为什么会这样,有没有一个字符数组不能和另一个字符数组比较的规则,如果有,怎么和字符串比较?

解决方法

请记住,数组自然衰减指向指向它们的第一个元素的指针,而您正在比较的正是这些指针。

简而言之,您真正在做的是:

if(&s[0] == &a[0])

这两个指针将永远不相等。

要比较字符数组的内容,需要使用strcmp()或类似函数代替,例如:

if(strcmp(s,a) == 0)

由于您使用 C++ 编程,请对所有字符串使用 std::string。如果您有 == 值,则 std::string 运算符的重载可以做正确的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。