Подтвердить что ты не робот

Создать строку с указанным количеством символов

Есть ли способ создать строку из 256 символов при инициализации с помощью С++?

Часть моего задания требует от меня "1. Создайте строку из 256 символов. Используйте повторения своего имени".

Я не совсем уверен, как это сделать, кроме использования цикла, но я чувствую, что есть более простой способ.

4b9b3361

Ответ 1

Не хватает информации, чтобы сказать действительно. Из того, что вы сказали, это звучит так, как будто его использовать только текстовый редактор, чтобы сделать строку 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 ";

Готово.

Ответ 2

Взглянув на ссылку на конструктор 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
    });

Пример в реальном времени.

Ответ 3

Если вы хотите очень длинную строку, вы можете сократить количество повторений циклов путем удвоения.

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

Ответ 4

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

Это, если вы хотите сгенерировать строку. Я уверен, что есть более короткий способ сделать это...

Ответ 5

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 второй.