使用 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);
}

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

尽管您可以使用 std::stringc_str() 方法检索此类型的指针,但由于您正在使用std::string对象,因此应改用运算符 ==

if (ligne == ligne_or) ...

或与const char*比较:

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

只需使用 std::stringoperator==

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

更改

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

if (ligne != ligne_or)

如果你想使用 strcmp,那么试试

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

我喜欢提升算法库。

#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;

最新更新