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

时间:2013-10-04 14:36:46

标签: 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");
    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);
}

5 个答案:

答案 0 :(得分:7)

您的编译器会给您一个错误,因为strcmp是一个C风格的函数,它需要类型为const char*的参数,并且没有从std::stringconst 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;