Создать строку с указанным количеством символов
Есть ли способ создать строку из 256 символов при инициализации с помощью С++?
Часть моего задания требует от меня "1. Создайте строку из 256 символов. Используйте повторения своего имени".
Я не совсем уверен, как это сделать, кроме использования цикла, но я чувствую, что есть более простой способ.
Ответы
Ответ 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 второй.