3

私はこの関数を持っていますが、コンパイラは「文字列を const char に変換できません」と叫びます。

void 
DramaticLetters(string s, short TimeLength)
{
    for(int i = 0, sLen = strlen(s); i < sLen; i++){
        cout << s[i];
        Sleep(TimeLength);
    }
}

strlenに何か問題があると思います

4

5 に答える 5

4

strlen()Cconst char*ストリング用です。文字列の長さを取得するには、またはsを使用します。からC文字列を取得する場合は、を使用します。s.size()s.length()strings.c_str()

C ++では、とは互換性があるように見えます、に変換する場合は一方向にしか進みません。const char*stringconst char*string

どちらかを使いたい理由はありませんstrlenstrlenはループで定義されている可能性が高く、これは、クラスsize()の長さプロパティのゲッターであるほど効率的ではありません。C ++の代替手段がないC関数を呼び出す場合にstringのみ、C文字列に変換します。string

于 2012-08-15T14:11:36.280 に答える
1

CとC++の文字列関数を混在させないでください。strlen()(Cスタイルの関数)の代わりに、 string::size():を使用します。

for(int i = 0, sLen = s.size(); i < sLen; i++) {
    cout << s[i];
    Sleep(TimeLength);
}

ここに、クラスのすべてのメソッドのリファレンスstringがあります。

于 2012-08-15T14:12:03.250 に答える
1

クリスがコメントで言ったように、strlenはに使用されconst char *ますが、あなたはそれを渡しますstring。それ以外の

for(int i = 0, sLen = strlen(s); i < sLen; i++){
    cout << s[i];
    Sleep(TimeLength);
}

これを使って:

for(int i = 0, sLen = s.length(); i < sLen; i++){
    cout << s[i];
    Sleep(TimeLength);
}
于 2012-08-15T14:12:14.653 に答える
0

strlenで動作しchar const *ます。本当に必要な場合は、実行できますがstrlen(s.c_str())、文字列内の文字数を返すメソッドstd::stringなど、多くの機能があります。length()

于 2012-08-15T14:12:30.567 に答える
0

いくつかの発言:

  • 関数内で文字列を変更しないので、const参照を関数に渡す方がよい(const string&s)

  • 文字列自体は、その長さを取得するためのメソッドを定義します-s.size()とs.length()は両方とも機能します。追加の利点は、strlenの線形の複雑さとは対照的に、この方法は両方とも複雑さに関して一定であるということです。

  • 本当にstrlenを使用したい場合は、s.c_str()を使用してください。strlen(s.c_str())

于 2012-08-15T14:12:58.807 に答える