0

C ++の初心者として、私は長い間この点にとても戸惑っています。プログラムは文字列内の各単語の出現時間を伝えることです。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string x;
    vector<string> str;
vector<int> t;
while (cin >> x)
{
    int k = 0;
    for (int j = 0; j != str.size(); j++)
    {
        if (strcmp(x,str[j]) == 0)
            t[j]++;
        k = 1;
    }
    if (k == 0)
    { 
        str.push_back(x);  
        t.push_back(1);     
    }  

}

for (int i = 0; i != str.size(); i++ )
{
    cout << str[i] << "   " << t[i] << endl;
}

return 0;
}

エラーは次のとおりです。

C++\code\3.3.cpp(17) : error C2664: 'strcmp' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

久しぶりにインターネットで検索結果が見つかりません。どうすればこれを修正できますか?

4

5 に答える 5

1

xとyがC++文字列の場合は、単に。と言いx == yます。strcmpC++オブジェクトでC関数を使用しようとしています。

yがCスタイルの文字列の場合、x == yCスタイルの文字列は自動的にC ++スタイルの文字列に変換されるため、同じコードも機能しますが、この場合strcmp(x.c_str(), y) == 0、自動変換が回避されるため、これを行う方がよい場合があります。

xとyが両方ともCスタイルの文字列である場合にのみ、実行する必要がありますstrcmp(x, y) == 0

于 2012-08-05T09:45:56.023 に答える
0

コンパイラは、const char*または に変換可能なものを期待しconst char*ます。しかしstd::string、暗黙的に に変換可能ではありませんconst char*

を使用するstrcmp場合は、メソッドを使用してc_strを取得する必要がありconst char*ます。しかし、あなたの場合、==std::string で動作するようにオーバーロードされたものを使用する方がおそらく良いでしょう。

于 2012-08-05T09:50:34.740 に答える