Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用strcmp比较两个字符串的问题_C++_String_Comparison_String Comparison_Strcmp - Fatal编程技术网

C++ 使用strcmp比较两个字符串的问题

C++ 使用strcmp比较两个字符串的问题,c++,string,comparison,string-comparison,strcmp,C++,String,Comparison,String Comparison,Strcmp,我想比较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"); whi

我想比较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);
}

编译器会给您一个错误,因为它是一个C风格函数,需要类型为
const char*
的参数,并且没有从
std::string
const char*
的隐式转换

虽然您可以使用
std::string
c_str()
方法检索此类型的指针,但由于您使用的是对象,因此应该使用运算符
=

if (ligne == ligne_or) ...
或与常量字符比较*:

if (ligne == "[Syn****]") ...

编译器会给您一个错误,因为它是一个C风格函数,需要类型为
const char*
的参数,并且没有从
std::string
const char*
的隐式转换

虽然您可以使用
std::string
c_str()
方法检索此类型的指针,但由于您使用的是对象,因此应该使用运算符
=

if (ligne == ligne_or) ...
或与常量字符比较*:

if (ligne == "[Syn****]") ...

只需使用
std::string


只需使用
std::string

改变

改变


如果你想使用strcmp,那就试试吧

if (strcmp(ligne.c_str(), ligne_or.c_str()) != 0)
   ...

如果你想使用strcmp,那就试试吧

if (strcmp(ligne.c_str(), ligne_or.c_str()) != 0)
   ...

我喜欢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;
#包括
std::字符串s1(“这是字符串1”);
std::string s2(“这是string 2”);
名称空间balg=boost::algorithm;
//将他们与平等者进行比较
if(balg::等于(s1,s2))

我喜欢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;
#包括
std::字符串s1(“这是字符串1”);
std::string s2(“这是string 2”);
名称空间balg=boost::algorithm;
//将他们与平等者进行比较
if(balg::等于(s1,s2))

std::cout循环时第一个
做什么?它几乎什么都不做,对吗?
string
类的引入正是为了避免使用C str函数;)第一个
循环做什么?它几乎什么都不做,对吗?
string
类的引入正是为了避免使用C str函数;)