1

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

5 回答 5

7

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

std::string尽管您可以使用's方法检索这种类型的指针,但c_str()由于您正在处理std::string对象,因此您应该使用运算符==

if (ligne == ligne_or) ...

或比较const char*

if (ligne == "[Syn****]") ...
于 2013-10-04T14:37:45.373 回答
7

只需使用std::string's operator==

if (ligne == "[SynCommunity]") ...

if (ligne == ligne_or) ...
于 2013-10-04T14:37:53.217 回答
5

如果您想使用 strcmp,请尝试

if (strcmp(ligne.c_str(), ligne_or.c_str()) != 0)
   ...
于 2013-10-04T14:43:10.353 回答
5

改变

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

if (ligne != ligne_or)
于 2013-10-04T14:38:12.417 回答
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;
于 2013-10-04T16:04:53.507 回答