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