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

时间:2010-05-28 18:52:46

标签: 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;
}

我被困住了。

6 个答案:

答案 0 :(得分:14)

std::string实例可以使用!===运算符直接与字符串文字进行比较。这使您的比较更加清晰。

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

while( cmd == "exit" && cmd == "\\exit" )

显然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;
}

答案 1 :(得分: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;
}

但是,我想知道你为什么要使用std::strcmp()。正如您刚刚发现的那样,它不像std::string类那样容易使用。此

while(cmd!="exit" && cmd!="\\exit")

同样适用,更容易理解,因此更容易正确。

答案 2 :(得分:4)

strcmp在相等时返回0。所以我想你想要!= 0

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

看起来你的字符串开头有一个反斜杠,你应该用双反斜杠转义它。

答案 3 :(得分:2)

您所处的状态永远不会评估为true,因为您正在测试以检查cmd字符串是否等于"exit" "\\exit"。一个字符串永远不能同时等于两个值。

答案 4 :(得分:0)

你的问题是暂时的条件。

您可能希望在用户进入退出时退出循环,因此您应该使用:

while(strcmp(cmd.c_str(),"exit")!=0 && strcmp(cmd.c_str(),"\exit")!=0)

答案 5 :(得分:0)

只需记住几件事,我重申一些值得重复的建议(1)次。

  1. 您正在使用C ++,它是面向对象的,即最好将数据和对其起作用的函数组合在一起。在这种情况下,请使用字符串类而不是strcmp提供的字符串比较选项。

  2. 您的程序中存在逻辑错误,它会编译,但我担心这不是您想要的。 if(a == x&amp;&amp; a == y)这将永远为假,因为除非x = y,否则不能等于x和y,在你的情况下显然是x!= y。

    < / LI>

    干杯, 帕