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 char
s 足以容纳输入;根据需要进行更改)。
std::string M = "drawer";
cout<<M<<endl;
if(M.compare("knife") == 0)
{
// do whatever
}
You can also do:
if(M == "knife")
{
// do whatever
}
除非你需要使用C字符串,否则为什么不用标准库字符串呢?没有理由让生活变得更加困难。
我对一个简单的 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 char
s 足以容纳输入;根据需要进行更改)。
std::string M = "drawer";
cout<<M<<endl;
if(M.compare("knife") == 0)
{
// do whatever
}
You can also do:
if(M == "knife")
{
// do whatever
}
除非你需要使用C字符串,否则为什么不用标准库字符串呢?没有理由让生活变得更加困难。