【问题标题】:Create string with specified number of characters创建具有指定字符数的字符串
【发布时间】:2012-09-18 19:08:42
【问题描述】:

有没有办法在用 c++ 初始化时创建一个 256 个字符的字符串?

我的部分作业要求我“1. 创建一个 256 个字符的字符串。使用你的名字的重复。”

除了使用循环之外,我不太确定如何做到这一点,但我觉得有一种更简单的方法。

【问题讨论】:

  • 如果你的意思是std::string,那么不,没有构造函数可以做到这一点。有一个构造函数可以使某个字符的 n 重复字符串,但仅此而已。您必须使用循环。
  • 什么是构造函数?
  • 我知道什么是构造函数我只是想知道你说的那个。
  • 嘿,抱歉 :) reference page 排名第二

标签: c++ c string variables


【解决方案1】:

看看the constructor reference of 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
    });

Live example.

【讨论】:

  • 巧妙地使用generate,我正在考虑制作一个单独的fill_pattern函数。
  • 非常好的例子。但是对于正在学习编程的人来说太难了。
【解决方案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;
}

【讨论】:

    【解决方案3】:
    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); 
    

    这是如果你想生成字符串。我相当确定有一种更短的方法可以做到这一点......

    【讨论】:

    • do { names += myName; } while (names.size() &lt; 256); names.resize(256);
    • @jrok:非常好。我喜欢您使用 resize() 将字符串截断为 256 个字符的方式。光滑。
    【解决方案4】:

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

    据我了解,您只想保留 256 个元素。

    它没有构造函数,你不能在初始化时设置 capacity()。可能您想在初始化后使用 .reserve 。注意reserve():

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

    也许您需要不同的类型?

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

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

    【讨论】:

      【解决方案5】:

      没有足够的信息可以说真的。根据您的说法,使用您的文本编辑器制作一个 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 ";
      

      完成。

      【讨论】:

        猜你喜欢
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 2017-03-20
        • 2017-04-25
        • 2013-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多