如何将字符串与const char*进行比较?

arz*_*eth 13 c++

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
        string cmd;
        while(strcmp(cmd.c_str(),"exit")==0 && strcmp(cmd.c_str(),"\exit")==0)
        {
                cin>>cmd;
                cout<<cmd;
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我被卡住了.

CB *_*ley 15

std::string实例可以直接与文字使用一个字符串进行比较!===操作员.这使您的比较更清晰.

请注意,这\e不是有效的字符转义,\如果您的意思是文字,则需要加倍\\.

while( cmd == "exit" && cmd == "\\exit" )
Run Code Online (Sandbox Code Playgroud)

显然cmd不能同时等于两个不同的字符串,大概是你的意思!=.

另外,考虑是否std::getline( std::cin, cmd )更合适std::cin >> cmd;.在任何一种情况下,您都应该检查读操作是否成功,否则如果流关闭或进入失败状态,您可能会以无限循环结束.

我个人会这样做,假设你想要像你的代码那样回应退出命令.

#include <string>
#include <iostream>
#include <ostream>

int main()
{
    std::string cmd;
    while (std::getline(std::cin, cmd))
    {
        std::cout << cmd << std::endl;
        if (cmd == "exit" || cmd == "\\exit")
            break;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


sbi*_*sbi 13

修复了几个小错误后,这可以在我的机器上运行:

#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>

int main()
{
        std::string cmd;
        while( std::strcmp(cmd.c_str(),"exit")!=0
            && std::strcmp(cmd.c_str(),"\\exit")!=0)
        {
                std::cin>>cmd;
                std::cout<<cmd << '\n';
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道你为什么要使用它std::strcmp().正如您刚刚发现的那样,它并不像std::string课堂那么容易使用.这个

while(cmd!="exit" && cmd!="\\exit")
Run Code Online (Sandbox Code Playgroud)

同样有效,更容易理解,因此更容易正确.


Bri*_*ndy 5

strcmp当它们相等时返回 0。所以我认为你想要 != 0

肯定strcmp不会为两者都返回 0,因为它不能等于两者。

此外,您的字符串开头似乎有一个反斜杠,您应该使用双反斜杠对其进行转义。