Geo*_*ort 1 c++ string assignment-operator
我一直在使用:
string letters = THESAMELENGTH; // Assign for allocation purposes.
Run Code Online (Sandbox Code Playgroud)
原因是,如果我:
string letters[THESAMELENGTH.length()];
Run Code Online (Sandbox Code Playgroud)
我收到一个非常量表达式投诉。
但如果我:
string letters[12];
Run Code Online (Sandbox Code Playgroud)
如果指南 const 字符串更改大小,我将面临需要更改每个实例的风险。
但是当我不使用这些条目时分配一个字符串似乎很愚蠢,我只希望我新分配的字符串与之前分配的 const 字符串长度相同,然后填充不同的值。
您如何建议我优雅且安全地执行此操作?
你可以
string letters(THESAMELENGTH.length(), ' '); // constructs the string with THESAMELENGTH.length() copies of character ' '
Run Code Online (Sandbox Code Playgroud)
BTW:string letters[12];和你想象的不一样。它声明了一个string,包含 12 个元素的数组。
我只希望我新分配的字符串与之前分配的 const 字符串长度相同,然后填充不同的值。
string类/类型存在的部分原因是您不必担心尝试管理其长度。(数组的问题char。)
如果你有一个,const std::string tmp那么你不能在它已经被初始化后给它分配任何东西。例如:
const std::string tmp = "A value"; // initialization
tmp = "Another value"; // compile error
Run Code Online (Sandbox Code Playgroud)
您如何建议我优雅且安全地执行此操作?
如果你真的想保持字符串为特定大小,不管他们的内容,你总是可以resize的string变量。例如:
// 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);
Run Code Online (Sandbox Code Playgroud)
现在,您的word字符串的长度/大小为MAX_STRING_LENGTH并且超出末尾的任何内容都将被截断。
这个例子来自C++ 参考
// resizing string
#include <iostream>
#include <string>
int main ()
{
std::string str ("I like to code in C");
std::cout << str << '\n';
unsigned sz = str.size();
str.resize (sz+2,'+');
std::cout << str << '\n';
str.resize (14);
std::cout << str << '\n';
return 0;
}
// program output
I like to code in C
I like to code in C++
I like to code
Run Code Online (Sandbox Code Playgroud)
你不能只在编译时询问字符串变量的长度。根据定义,不可能在未运行时知道变量的值或任何给定程序的状态。这个问题只在运行时有意义。
其他人已经提到了这一点,但您对string letters[12];. 这为您提供了一组string类型,即您可以获得 12 个完整字符串(例如单词/句子/等)的空间,而不仅仅是字母。
换句话说,你可以这样做:
for(size_t i = 0; i < letters.size(); ++i)
letters[i] = "Hello, world!";
Run Code Online (Sandbox Code Playgroud)
所以你的letters变量应该重命名为更准确的东西(例如words)。
如果你真的想要字母(例如单个字符串上的完整字母),你可以这样做:
// 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];
// ...
Run Code Online (Sandbox Code Playgroud)
这完全取决于您需要做什么,但这可能是一个不错的选择。
免责声明:请注意,我并不建议您这样做。你应该让我们string管理自己的长度。例如,如果该string值实际上比您的限制短,您将导致您的变量使用比需要更多的空间/内存,如果它更长,您仍然会截断它。恕我直言,这两种副作用都不好。
| 归档时间: |
|
| 查看次数: |
14745 次 |
| 最近记录: |