如果在编译时确定字符串的长度,我该如何正确初始化它呢?
#include <string>
int length = 3;
string word[length]; //invalid syntax, but doing `string word = " "` will work
word[0] = 'a';
word[1] = 'b';
word[2] = 'c';
...这样我可以做这样的事情吗?
我这样做的目的是因为我有一个循环将另一个字符串的某些区域中的字符复制到一个新字符串中。
答案 0 :(得分:16)
字符串是可变的,它的长度可以在运行时更改。但是,如果必须具有指定的长度,则可以使用“填充构造函数”: http://www.cplusplus.com/reference/string/string/string/
std::string s6 (10, 'x');
s6
现在等于“xxxxxxxxxx”。
答案 1 :(得分:2)
您可以像这样初始化字符串:
string word = "abc"
或
string word(length,' ');
word[0] = 'a';
word[1] = 'b';
word[2] = 'c';
答案 2 :(得分:2)
您可能正在寻找:
string word(3, ' ');
答案 3 :(得分:1)
std::string
不支持编译时已知的长度。甚至有人建议将编译时字符串添加到C ++标准中。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4121.pdf
现在你运气不好。你可以做的是使用static const char[]
,它确实支持编译时常量字符串,但显然缺少std::string
的一些细节。哪个合适取决于你正在做什么。可能不需要std::string
个功能,static char[]
是可行的方法,或者可能需要std::string
并且运行时成本可忽略不计(非常可能)。
您尝试的语法适用于static const char[]
:
static const char myString[] = "hello";
其他答案中显示的std::string
的任何构造函数都是在运行时执行的。
答案 4 :(得分:1)
以下情况如何?
string word;
word.resize(3);
word[0] = 'a';
word[1] = 'b';
word[2] = 'c';
有关调整字符串大小的更多信息:http://www.cplusplus.com/reference/string/string/resize/