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

如果你想要一个很长的字符串,你可以通过加倍来减少循环重复的次数。

#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 。注意储备():

这可以扩大或缩小字符串中存储空间的大小,但请注意,调用此函数后的结果容量不一定等于 res_arg,但可以等于或大于 res_arg,因此缩小请求可能会也可能不会在特定库实现中产生分配空间的实际减少。

也许你需要不同的类型?

如果您只想填写字符串而不是使用:

http://en.cppreference.com/w/cpp/string/basic_string/basic_string 第二个。

于 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 回答