有没有办法在初始化时用c ++创建一个说256个字符的字符串?
我的部分工作要求我“1.创建一个包含256个字符的字符串。重复使用您的名字。”
除了使用循环之外,我不太清楚如何做到这一点,但我觉得有一种更简单的方法。
答案 0 :(得分:77)
看一下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
});
答案 1 :(得分: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;
}
答案 2 :(得分:1)
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);
这是您要生成字符串。我很确定有一个更短的方法来做到这一点...
答案 3 :(得分:1)
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第二个。
答案 4 :(得分:-18)
没有足够的信息可以说真的。根据你的说法,只需使用你的文本编辑器就可以使用你的名字重复制作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 ";
完成。