【问题标题】:Why when a character array is compared to another character array, output is wrong but when character array is compared to a string output is correct? [duplicate]为什么当一个字符数组与另一个字符数组比较时,输出是错误的,而当字符数组与字符串比较时,输出是正确的? [复制]
【发布时间】:2021-03-21 09:14:36
【问题描述】:

问题 - 从伯兰语翻译成伯兰语并非易事。这些语言非常相似:伯兰语单词与具有相同含义的伯兰语单词略有不同:拼写(和发音)相反。例如,伯兰语单词代码对应于伯兰语单词 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";}
}

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

【问题讨论】:

    标签: c++ arrays string if-statement data-structures


    【解决方案1】:

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

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

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

    这两个指针将永远相等。

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

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

    由于您使用 C++ 编程,请使用 std::string 处理所有字符串。如果您有 std::string 值,则 == 运算符的重载会执行正确的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2014-06-11
      相关资源
      最近更新 更多