C++ 如何声明与已知常量字符串长度相同的新字符串?

C++ 如何声明与已知常量字符串长度相同的新字符串?,c++,string,assignment-operator,C++,String,Assignment Operator,我一直在使用: string letters = THESAMELENGTH; // Assign for allocation purposes. 原因是,如果我: string letters[THESAMELENGTH.length()]; 我得到一个非经常性的抱怨 但如果我: string letters[12]; 如果guide const字符串改变大小,我就有可能需要更改每个实例 但在我不使用这些条目的情况下分配字符串似乎很愚蠢,我只希望新分配的字符串与以前分配的常量字符串长度

我一直在使用:

string letters = THESAMELENGTH; // Assign for allocation purposes.
原因是,如果我:

string letters[THESAMELENGTH.length()];
我得到一个非经常性的抱怨

但如果我:

string letters[12];
如果guide const字符串改变大小,我就有可能需要更改每个实例

但在我不使用这些条目的情况下分配字符串似乎很愚蠢,我只希望新分配的字符串与以前分配的常量字符串长度相同,然后用不同的值填充

您建议我如何优雅而安全地进行此操作?

您可以

string letters(THESAMELENGTH.length(), ' '); // constructs the string with THESAMELENGTH.length() copies of character ' '
顺便说一句:
字符串字母[12]的意思与您预期的不同。它声明一个字符串数组,包含12个元素。

您可以

string letters(THESAMELENGTH.length(), ' '); // constructs the string with THESAMELENGTH.length() copies of character ' '
顺便说一句:
字符串字母[12]的意思与您预期的不同。它声明了一个字符串数组,包含12个元素

我只希望新分配的字符串与以前分配的常量字符串长度相同,然后用不同的值填充

字符串
类/类型存在的部分原因是,您不必担心如何管理其长度。(字符数组的问题)

如果您有一个
const std::string tmp
,那么您不能在初始化之后为它分配任何内容。例如:

const std::string tmp = "A value";  // initialization
tmp = "Another value";              // compile error
你建议我如何优雅而安全地做这件事

如果您真的想将字符串保持在特定的大小,而不管其内容如何,您可以始终
调整
您的
字符串
变量的大小。例如:

// in some constants.h file
const int MAX_STRING_LENGTH = 16;

// in other files
#include "constants.h"
// ...
std::string word = ... // some unknown string
word.resize(MAX_STRING_LENGTH);
现在,您的
word
字符串的长度/大小将为
MAX\u string\u length
,超出末尾的任何内容都将被截断

这个例子来自

因此,应将
字母
变量重命名为更准确的值(例如
单词

如果您确实想要字母(例如,单个字符串上的完整字母表),可以执行以下操作:

// constants.h
const std::string ALPHABET_LC = "abc...z";
const std::string ALPHABET_UC = "ABC...Z";
const int LETTER_A = 0;
const int LETTER_B = 1;
// ...

// main.cpp, etc.
char a = ALPHABET_LC[LETTER_A];
char B = ALPHABET_UC[LETTER_B];
// ...
这完全取决于你需要做什么,但这可能是一个好的选择

免责声明:请注意,我并不建议您这样做。您应该让
string
s管理自己的长度。例如,如果
字符串
值实际上比您的限制短,则会导致变量使用的空间/内存超过需要的空间/内存,如果它更长,则仍会截断它。两种副作用都不好,伊姆霍

我只希望新分配的字符串与以前分配的常量字符串长度相同,然后用不同的值填充

字符串
类/类型存在的部分原因是,您不必担心如何管理其长度。(字符数组的问题)

如果您有一个
const std::string tmp
,那么您不能在初始化之后为它分配任何内容。例如:

const std::string tmp = "A value";  // initialization
tmp = "Another value";              // compile error
你建议我如何优雅而安全地做这件事

如果您真的想将字符串保持在特定的大小,而不管其内容如何,您可以始终
调整
您的
字符串
变量的大小。例如:

// in some constants.h file
const int MAX_STRING_LENGTH = 16;

// in other files
#include "constants.h"
// ...
std::string word = ... // some unknown string
word.resize(MAX_STRING_LENGTH);
现在,您的
word
字符串的长度/大小将为
MAX\u string\u length
,超出末尾的任何内容都将被截断

这个例子来自

因此,应将
字母
变量重命名为更准确的值(例如
单词

如果您确实想要字母(例如,单个字符串上的完整字母表),可以执行以下操作:

// constants.h
const std::string ALPHABET_LC = "abc...z";
const std::string ALPHABET_UC = "ABC...Z";
const int LETTER_A = 0;
const int LETTER_B = 1;
// ...

// main.cpp, etc.
char a = ALPHABET_LC[LETTER_A];
char B = ALPHABET_UC[LETTER_B];
// ...
这完全取决于你需要做什么,但这可能是一个好的选择


免责声明:请注意,我并不建议您这样做。您应该让
string
s管理自己的长度。例如,如果
字符串
值实际上比您的限制短,则会导致变量使用的空间/内存超过需要的空间/内存,如果它更长,则仍会截断它。这两种副作用都不是好的,IMHO。

您需要做的第一件事是理解字符串长度和数组维度之间的差异

  std::string letters = "Hello";
创建单个
字符串
,该字符串包含
“Hello”
中的字符,长度为
5

相比之下

  std::string letters[5];
创建五个不同的默认构造对象的数组,类型为
std::string
。它不会创建一个包含5个字符的字符串。在做某事时不停抱怨的原因

  std::string letters[THESAMELENGTH.length()];

是标准C++中的数组构造需要使用编译器已知的长度,而在运行时确定<<代码> STD::String 的长度。 如果您有一个字符串,以及如何创建另一个相同长度的字符串,您可以执行以下操作

  std::string another_string(letters.length(), 'A');
这将创建一个包含所需字母数的字符串
'a'


std::string
可以根据需要动态更改其长度时,执行您想要的操作基本上是没有意义的。也没有什么可以阻止
std::string
分配超出其需要的资源(例如,为其长度的多次增加做好准备)。

您需要做的第一件事是了解字符串长度和数组维度之间的差异

  std::string letters = "Hello";
创建单个
字符串
,该字符串包含
“Hello”
中的字符,长度为
5

相比之下

  std::string letters[5];
创建五个不同的默认构造对象的数组,类型为
std::string
。它不会创建一个包含5个字符的字符串。在做某事时不停抱怨的原因

  std::string letters[THESAMELENGTH.length()];

是标准C++中的数组构造需要使用编译器已知的长度,而在运行时确定<<代码> STD::String 的长度。 如果您有一个字符串,以及如何创建另一个相同长度的字符串,您可以执行以下操作

  std::string another_string(letters.length(), 'A');
whi