2009-10-16 3 views
6

文字のn個の文字列を作成する方法が必要です。この場合ascii値はゼロです。標準テンプレートStringクラス:string.fill()

私は、コンストラクタを呼び出すことによってそれを行うことができます知っている:

文字列STEMP(125000、 'A');

しかし、私は多くの場所でsTempを再利用し、異なる長さでそれを埋めたいと思います。

私は、引数として文字列ポインタと長さをとり、その文字列をバイトで埋め込むライブラリを呼び出しています。 (私は技術的に文字列が連続していないことを知っていますが、すべての目的と目的のために、まもなく標準になります)。私はベクトルを使いたくない。

文字列が作成された後でコンストラクタを再度呼び出す方法がありますか?

答えて

12

stringクラスは、指定された文字列に新しい値を割り当てる方法assignを提供します。私はあなたが5つ目のようなものを探しているのだと思うcplusplus.com(それは非常にC++標準ライブラリのリファレンスを詳述あなたを与えるので、私はこのサイトをお勧めします。)

:署名は、ソースを引用

1. string& assign (const string& str); 
2. string& assign (const string& str, size_t pos, size_t n); 
3. string& assign (const char* s, size_t n); 
4. string& assign (const char* s); 
5. string& assign (size_t n, char c); 
6. template <class InputIterator> 
    string& assign (InputIterator first, InputIterator last); 

ですnは文字列の長さを指定し、c文字をこの文字列に入力します。例えば、あなたが書く場合、

sTemp.assign(10, 'b'); 

あなたの文字列は10 bで完全に満たされます。

私はもともとSTLアルゴリズムstd::fillを使用することを提案しましたが、文字列の長さは変更されません。メソッドstring::resizeは、文字列のサイズを変更する方法を提供し、付加された文字を所定の値で塗りつぶしますが、追加された文字のみが設定されます。最後にstring::assignが最良の方法です!

+0

なぜ投票ダウン?理由を記したコメントを少なくとも残してください。この方法でしか学ぶことができません! – phlipsy

+0

私はdownvoteをしませんでしたが、可能ならば他の#includeは必要ありません –

+0

あなたが気づいたように、文字列のサイズを変更することができないので、fillは良くありません。 resizeは最初の文字を使用して文字列内の新しい文字を初期化するだけです(サイズ変更後)。元の文字列はそのままです。それらは「コンストラクタを再度呼び出す」という望ましい効果とは一致しません。適切な機能が割り当てられます。 –

3

てみ使用する:

sTemp.resize(newLength, 'a'); 

参考文献:

void __CLR_OR_THIS_CALL resize(size_type _Newsize) 
    { // determine new length, padding with null elements as needed 
    resize(_Newsize, _Elem()); 
    } 

void __CLR_OR_THIS_CALL resize(size_type _Newsize, _Elem _Ch) 
    { // determine new length, padding with _Ch elements as needed 
    if (_Newsize <= _Mysize) 
     erase(_Newsize); 
    else 
     append(_Newsize - _Mysize, _Ch); 
    } 
+1

「それは次のものだ」と誤解を招く。これは1つの実装です。 – GManNickG

+0

あなたは正しいです、私は言い換えました。 –

+0

また、それは間違ったサイズ変更機能です:) – GManNickG

関連する問題