C++ 即使在相同字符串之间进行比较,strcmp()也会返回错误的值 #包括 #包括 #包括 使用名称空间std; int main() { 字符串x; cin>>x; if(strcmp(&x.at(0),“M”)==0) { cout

C++ 即使在相同字符串之间进行比较,strcmp()也会返回错误的值 #包括 #包括 #包括 使用名称空间std; int main() { 字符串x; cin>>x; if(strcmp(&x.at(0),“M”)==0) { cout,c++,string,if-statement,strcmp,C++,String,If Statement,Strcmp,希望比较两个以null结尾的字符串。它将开始比较每个字符串的第一个字符。如果它们彼此相等,则继续对以下字符进行比较,直到字符不同或到达以null结尾的字符 您要比较两个字符。请尝试以下操作: #include <iostream> #include <string> #include <stdlib.h> using namespace std; int main() { string x; cin>>x; if(str

希望比较两个以null结尾的字符串。它将开始比较每个字符串的第一个字符。如果它们彼此相等,则继续对以下字符进行比较,直到字符不同或到达以null结尾的字符

您要比较两个字符。请尝试以下操作:

#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;
}

当解释为C样式字符串时,
&x.at(0)
实际上等同于
x.C_str()
:这两个函数都返回指向字符串中第一个字符的指针。对C样式字符串进行操作的函数,如
strcmp
,将通过读取到第一个空字符来确定字符串长度

因此,在您的示例中,您的第一个测试将“MB”与“M”进行比较

当然,您对第二个字符的测试是有效的,因为“B”后面紧跟着空分隔符


正如其他人已经说过的,您可以通过直接的
char
比较来做您需要的事情:
x.at(0)='M'

您可以使用
x.at(n)='a'
来比较单个字符。@NeilKirk它说:int和char之间的比较无效*@NeilKirk您是对的。我对char使用了双引号。@(
if(x.at(0) == 'M')
...