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::stringconst char*

std::stringc_str()メソッドを使用してこの型のポインターを取得することもできますが、std::stringオブジェクトを操作しているため、代わりに演算子を使用する必要があります。==

if (ligne == ligne_or) ...

またはとの比較const char*:

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

を使用するだけstd::stringですoperator==

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

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

変化する

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

if (ligne != ligne_or)
于 2013-10-04T14:38:12.417 に答える
1

ブースト アルゴリズム ライブラリが気に入っています。

#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 に答える