如何解决为什么当一个字符数组和另一个字符数组比较时,输出是错误的,而当字符数组和字符串比较时,输出是正确的?
问题 - 从 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 举报,一经查实,本站将立刻删除。