我想比较2个字符串但是当我执行strcmp
函数时,它会告诉我:
'strcmp' : cannot convert parameter 1 from 'std::string'
我该如何解决这个问题?
这是我的代码:
int verif_file(void)
{
string ligne;
string ligne_or;
ifstream verif("rasphone");
ifstream original("rasphone.pbk");
while (strcmp(ligne, "[SynCommunity]") != 0 &&
(getline(verif, ligne) && getline(original, ligne_or)));
while (getline(verif, ligne) && getline(original, ligne_or))
{
if (strcmp(ligne, ligne_or) != 0)
return (-1);
}
return (0);
}
答案 0 :(得分:7)
您的编译器会给您一个错误,因为strcmp
是一个C风格的函数,它需要类型为const char*
的参数,并且没有从std::string
到const char*
的隐式转换。
虽然您可以使用std::string
的{{1}}方法检索此类型的指针,但由于您使用的是std::string
个对象,因此您应该使用 运算符c_str()
代替:
==
或与if (ligne == ligne_or) ...
比较:
const char*
答案 1 :(得分:7)
只需使用std::string
的{{3}}:
if (ligne == "[SynCommunity]") ...
if (ligne == ligne_or) ...
答案 2 :(得分:5)
更改
if (strcmp(ligne, ligne_or) != 0)
到
if (ligne != ligne_or)
答案 3 :(得分:5)
如果您想使用strcmp,请尝试
if (strcmp(ligne.c_str(), ligne_or.c_str()) != 0)
...
答案 4 :(得分:1)
我喜欢boost算法库。
#include <boost/algorithm/string.hpp>
std::string s1("This is string 1");
std::string s2("this is string 2");
namespace balg = boost::algorithm;
// comparing them with equals
if( balg::equals( s1, s2 ) )
std::cout << "equal" << std::endl;
else
std::cout << "not equal" << std::endl;
// case insensitive version
if( balg::iequals( s1, s2 ) )
std::cout << "case insensitive equal" << std::endl;
else
std::cout << "not equal" << std::endl;