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 通过索引分配似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在调试可视化工具中转换为 std::string (autoexp.dat)