创建具有指定字符数的字符串

Posted

技术标签:

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

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

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

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

【问题讨论】:

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

完成。

【讨论】:

以上是关于创建具有指定字符数的字符串的主要内容,如果未能解决你的问题,请参考以下文章

struct模块拆分字符串为指定字符数的字符串或元组

在具有索引Python数的Excel工作表中搜索特定字符串

如何将字符串(来自具有 n 行数的文件)存储在动态数组中? C++

在用户定义的列表中查找具有最大字符数的类对象的项目

Python如何在pandas数据框中提取[]括号内的指定字符串并创建一个具有布尔值的新列

如何从返回字符数的字符串创建字典[重复]