Create string with specified number of characters

六眼飞鱼酱① 提交于 2020-04-08 08:37:45

问题


Is there a way to create a string of say 256 characters at initialization with c++?

Part of my assignment requires me to "1. Create a string of 256 characters. Use repetitions of your first name."

I'm not quite sure of how to do this other than using a loop but I feel like there is an easier way.


回答1:


Taking a look at the constructor reference of basic_string, one can see that there is no easy way of repeating a complete string. For a single character, you could use (2) like this:

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

For generating a string repetition, you'll need some workaround. It's easier to do this post-construction by simply filling the string with, for example, std::generate (having fun with algorithms).

#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.




回答2:


If you want a very long string, you can cut down the number of loop repetitions by doubling.

#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); 

This is if you want to generate the string. I'm fairly sure there is a shorter way to do this...




回答4:


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

As far as i understand you you want to reserve only 256 elements.

There is no constructor for it, and you cant set capacity() at the initialization. Probably you want to use .reserve after initialization. Be aware reserve():

This can expand or shrink the size of the storage space in the string, although notice that the resulting capacity after a call to this function is not necessarily equal to res_arg but can be either equal or greater than res_arg, therefore shrinking requests may or may not produce an actual reduction of the allocated space in a particular library implementation.

Maybe you need a different type?

if you want just fill your string than use:

http://en.cppreference.com/w/cpp/string/basic_string/basic_string second one.




回答5:


Not enough information to say really. From what you said, it sounds like its valid to just use your text editor to make a string 256 long with your name repeating.

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 ";

Done.



来源:https://stackoverflow.com/questions/12483406/create-string-with-specified-number-of-characters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!