私はこの関数を持っていますが、コンパイラは「文字列を const char に変換できません」と叫びます。
void
DramaticLetters(string s, short TimeLength)
{
for(int i = 0, sLen = strlen(s); i < sLen; i++){
cout << s[i];
Sleep(TimeLength);
}
}
strlenに何か問題があると思います
strlen()
Cconst char*
ストリング用です。文字列の長さを取得するには、またはs
を使用します。からC文字列を取得する場合は、を使用します。s.size()
s.length()
string
s.c_str()
C ++では、とは互換性があるように見えますが、に変換する場合は一方向にしか進みません。const char*
string
const char*
string
どちらかを使いたい理由はありませんstrlen
。strlen
はループで定義されている可能性が高く、これは、クラスsize()
の長さプロパティのゲッターであるほど効率的ではありません。C ++の代替手段がないC関数を呼び出す場合にstring
のみ、C文字列に変換します。string
CとC++の文字列関数を混在させないでください。strlen()
(Cスタイルの関数)の代わりに、 string::size()
:を使用します。
for(int i = 0, sLen = s.size(); i < sLen; i++) {
cout << s[i];
Sleep(TimeLength);
}
ここに、クラスのすべてのメソッドのリファレンスstring
があります。
クリスがコメントで言ったように、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);
}
strlen
で動作しchar const *
ます。本当に必要な場合は、実行できますがstrlen(s.c_str())
、文字列内の文字数を返すメソッドstd::string
など、多くの機能があります。length()
いくつかの発言:
関数内で文字列を変更しないので、const参照を関数に渡す方がよい(const string&s)
文字列自体は、その長さを取得するためのメソッドを定義します-s.size()とs.length()は両方とも機能します。追加の利点は、strlenの線形の複雑さとは対照的に、この方法は両方とも複雑さに関して一定であるということです。
本当にstrlenを使用したい場合は、s.c_str()を使用してください。strlen(s.c_str())