if语句

时间:2015-05-23 14:24:34

标签: c++ string-comparison

我对简单的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]

的问题

我怎么能解决它?

3 个答案:

答案 0 :(得分:4)

试试这个:

std::string M;
cin >> M;

替换这样的行:

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

用这个:

if (M == "drawer" )

答案 1 :(得分:2)

为什么将char s(char M[] = ...;)数组更改为单charchar M;)?除了建议使用std::string(您应该这样做)的其他答案之外,如果您必须使用char变量数组,则需要在{{1}中使用之前使用std::unique_ptr<char> M(new char[100]) (我假设100 std::cin足以保存输入;必要时更改。

答案 2 :(得分:2)

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

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

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