即使比较在相同的字符串之间,strcmp()也会返回错误的值

时间:2015-10-09 15:11:34

标签: c++ string if-statement strcmp

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
    string x;
    cin>>x;

    if(strcmp(&x.at(0), "M") == 0)
    {
        cout<<"midget ";
    }
    else if(strcmp(&x.at(0), "J") == 0)
    {
        cout<<"junior ";
    }
    else if(strcmp(&x.at(0), "S") == 0)
    {
        cout<<"senior ";
    }
    else
    {
        cout<<"invalid code";
    }

    if(strcmp(&x.at(1), "B") == 0)
    {
        cout<<"boys";
    }
    else
    {
        cout<<"girls";
    }
    return 0;
}

我已经使用上面的代码比较MB应该返回&#34;侏儒男孩&#34;但它一直落到别的地方并返回&#34;无效的codeboys&#34;。不知何故第二个条件正常。我的诊断告诉我,在第一次比较时,它返回66。我猜这是&#34; M&#34;的ASCII代码。但是我现在如何解决我的问题?

1 个答案:

答案 0 :(得分:6)

strcmp期望比较两个以null结尾的字符串。它将开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符不同或者到达终止空字符为止。

你想要比较两个字符。试试这个:

if(x.at(0) == 'M')
...