if语句中的c ++字符串比较

c++ string comparison in if statement

我对一个简单的 C++ 函数有疑问。 这是我的 cpp 文件:

#include <string>
#include <iostream>

#include <stdio.h>
#include <ros/ros.h>
#include <json_prolog/prolog.h>

using namespace std;
using namespace json_prolog;

int main(int argc, char *argv[])
{
  ros::init(argc, argv, "Knives");

  Prolog pl;
char M[]="drawer";
cout<<M<<endl;
if(strcmp(M,"knife")==0)
{
    string  q= "rdfs_individual_of(M, 'http://knowrob.org/kb/knowrob.owl#TableKnife')";



PrologQueryProxy bdgs = pl.query(q);

        cout<< endl;

  for(PrologQueryProxy::iterator it=bdgs.begin(); it != bdgs.end(); it++)
  {
    PrologBindings bdg = *it;
    cout << "Knives individuals= "<< bdg["M"] << endl;
  }  

    cout<< endl<< endl;
}


if(strcmp(M,"drawer")==0)
{
    string  q= "rdfs_individual_of(M, 'http://knowrob.org/kb/knowrob.owl#Drawer')";

  PrologQueryProxy bdgs = pl.query(q);

        cout<< endl;

  for(PrologQueryProxy::iterator it=bdgs.begin(); it != bdgs.end(); it++)
  {
    PrologBindings bdg = *it;
    cout << "Drawer individuals= "<< bdg["M"] << endl;
  }  

    cout<< endl<< endl;
}

return 0;
}

此代码与 xml 文件连接以对其进行解析。 如果我编译它工作,我没有问题。 现在我必须改变它,因为我不想定义变量 char M 但我想在输入中给出它。问题是我改变了:

char M[]=....

与:

char M;
cin>>M;

我对从 char 到 const char 的转换有疑问 [-fpermissive]

我该如何解决?

试试这个:

std::string M;
cin >> M;

像这样替换行:

if(strcmp(M,"drawer")==0)

有了这个:

if (M == "drawer" )

为什么要将 char 的数组 (char M[] = ...;) 更改为单个 char (char M;)?除了建议使用 std::string 的其他答案(你应该这样做)之外,如果你必须使用 char 变量数组,你需要在 [=17] 中使用之前使用 std::unique_ptr<char> M(new char[100]) =](我假设 100 chars 足以容纳输入;根据需要进行更改)。

std::string M = "drawer";
cout<<M<<endl;
if(M.compare("knife") == 0)
{
    // do whatever
}

You can also do:
if(M == "knife")
{
    // do whatever
}

除非你需要使用C字符串,否则为什么不用标准库字符串呢?没有理由让生活变得更加困难。