std::string 通过索引分配似乎不起作用

Posted

技术标签:

【中文标题】std::string 通过索引分配似乎不起作用【英文标题】:std::string assignment through index doesn't seem to work 【发布时间】:2014-06-07 20:28:21 【问题描述】:

在 C++ 中

当我声明时

string string1;

那么我无法像中那样按索引分配

string1[0] = 'x';

但是,如果我先输入 string1 = "somestring";然后我就可以通过索引使用分配了。

string = ""; 

没用

所以我想知道为什么会这样。我认为 std::string 应该具有索引功能。

【问题讨论】:

【参考方案1】:

当你默认构造一个字符串时,它是空的。它的 char 数组没有元素,所以 [0] 不存在。如果你通过给它一个字符串来构造它,比如"somestring",它包含那个字符串并且第零个索引是s

【讨论】:

如何构造一个准备被索引的字符串?字符串 string1[0] ? @user3713215,听起来你应该得到一个book。【参考方案2】:

当您拥有string string1; 时,您声明的是一个空字符串。您必须先为其分配一个值,然后才能通过索引访问字符串的字符。

它不会仅通过 string1[0] = 'x'; 为您创建空字符串的索引 0,但是,如果字符串中已有字符,则允许您更改索引 0 处的值。

您可以通过构造函数创建一个“预分配”字符串: string (size_t n, char c); 其中n 是要复制的字符数,c 是要填充字符串的字符。因此,例如,您可以使用 std::string string1(5, ' '); 来创建一个包含 5 个空格的字符串。然后,您可以使用 0-4 之间的任何索引来将其他值放入字符串中(如您的原始问题 - string1[0] = 'x';)。 http://www.cplusplus.com/reference/string/string/string/

【讨论】:

以上是关于std::string 通过索引分配似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 EF Core 映射上添加唯一索引似乎不起作用

在调试可视化工具中转换为 std::string (autoexp.dat)

需要使用 std::string 用 const char* 填充数组,但它不起作用(我认为它正在存储指针)?

指针分配在递归函数中不起作用

捆绑安装不起作用

通过指针删除分配的内存不起作用