48

C ++での初期化時にたとえば256文字の文字列を作成する方法はありますか?

私の割り当ての一部では、「1。256文字の文字列を作成します。名の繰り返しを使用する」必要があります。

ループを使用する以外にこれを行う方法はよくわかりませんが、もっと簡単な方法があるように感じます。

4

5 に答える 5

112

のコンストラクター参照をbasic_string見ると、完全な文字列を繰り返す簡単な方法がないことがわかります。単一の文字の場合、次のように使用できます(2)

std::string s(5, 'a'); // s == "aaaaa"

文字列の繰り返しを生成するには、いくつかの回避策が必要です。たとえば、文字列にstd::generate(アルゴリズムを楽しんで)入力するだけで、この構築後の作業が簡単になります。

#include <string>
#include <algorithm>

// ...

std::string pattern("Xeo ");
auto pattern_it = pattern.begin();
std::string s(256, '\0');
std::generate(s.begin(), s.end(),
    [&]() -> char { 
      if(pattern_it == pattern.end())
        pattern_it = pattern.begin();
      return *pattern_it++; // return current value and increment
    });

実例。

于 2012-09-18T19:29:04.970 に答える
2

非常に長い文字列が必要な場合は、2倍にすることでループの繰り返し回数を減らすことができます。

#include <string>
using std::string;

string repeatToLength ( unsigned len, string s ) {
  string r, si = s;

  // add all the whole multiples of s.
  for ( unsigned q = len / s.size(); q > 0; q >>= 1 ) {
    if ( q & 1 ) r += si; // add si to r if the low bit of q is 1
    si +=  si; // double si
  }
  r += s.substr ( 0, len - r.size() ); // add any remainder
  return r;
}
于 2015-01-19T13:36:11.273 に答える
1
const string myName = "Blivit";
int numLeftOver = 256 % myName.length();

string Names;
for ( int Index = 0; Index < (256 / myName.length() ); ++Index ) {
   Names += myName;
}
Names += myName.substr(0, numLeftOver); 

これは、文字列を生成する場合です。私はこれを行うためのより短い方法があるとかなり確信しています...

于 2012-09-18T19:25:53.080 に答える
1

http://www.cplusplus.com/reference/string/string/

私が理解している限り、あなたは256個の要素だけを予約したいと思っています。

そのためのコンストラクターはなく、初期化時にcapacity()を設定することはできません。おそらく、初期化後に.reserveを使用する必要があります。reserved()に注意してください:

これにより、文字列内のストレージスペースのサイズが拡大または縮小される可能性がありますが、この関数の呼び出し後の結果の容量は必ずしもres_argと同じではなく、res_arg以上になる可能性があるため、縮小リクエストはそうでない場合もあります。特定のライブラリ実装で割り当てられたスペースの実際の削減を生成します。

たぶんあなたは別のタイプが必要ですか?

使用するよりも文字列を入力するだけの場合:

http://en.cppreference.com/w/cpp/string/basic_string/basic_string2 番目のもの。

于 2012-09-18T19:26:52.323 に答える
-22

本当に言うには十分な情報がありません。あなたが言ったことから、あなたの名前が繰り返される256の長さの文字列を作るためにあなたのテキストエディタを使うことは有効であるように思えます。

std::string name = 
    "Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan "
    "Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan "
    "Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan "
    "Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan Zan ";

終わり。

于 2012-09-18T19:16:37.423 に答える