为什么将一个字符数组与另一个字符阵列进行比较时,输出是错误的,而将字符数组与字符串输出进行比较时输出是正确的



问题-从伯兰语翻译成伯兰语并非易事。这些语言非常相似:伯兰语单词与意思相同的英格兰语单词有点不同:拼写(和发音(相反。例如,一个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值,那么==运算符的重载会做正确的事情。

最新更新