我想在特定索引处更改 C++ 字符串,如下所示:
string s = "abc";
s[1] = 'a';
以下代码有效吗?这是一种可接受的方式吗?
我没有找到任何说明它有效的参考:
http://www.cplusplus.com/reference/string/string/
这表示通过“字符串中的重载 [] 运算符”我们可以执行写操作。
原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想在特定索引处更改 C++ 字符串,如下所示:
string s = "abc";
s[1] = 'a';
以下代码有效吗?这是一种可接受的方式吗?
我没有找到任何说明它有效的参考:
http://www.cplusplus.com/reference/string/string/
这表示通过“字符串中的重载 [] 运算符”我们可以执行写操作。
原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的。您链接的网站有一个关于它的页面。您还可以使用 at 函数,它执行边界检查。
http://www.cplusplus.com/reference/string/string/operator%5B%5D/
原文由 Neil Kirk 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答867 阅读
1 回答937 阅读
1 回答973 阅读
1 回答736 阅读
1 回答839 阅读
在索引处将字符分配给
std::string
将产生正确的结果,例如:对于那些怀疑我的 IDE/库设置的人,请参阅 jdoodle 演示: http ://jdoodle.com/ia/ljR 和屏幕截图: https ://imgur.com/f21rA5R
打印
aac
。缺点是如果字符串 s 是空白字符串或者您写得太远,您可能会意外写入未分配的内存。 C++ 很乐意注销字符串的结尾,这会导致未定义的行为。更安全的方法是使用
string::replace
: http ://cplusplus.com/reference/string/string/replace例如
replace 函数获取字符串 s,并在位置 40 处用字符串 s2 替换了一个字符,一个问号。如果字符串为空白或您分配的内容超出范围,则没有未定义的行为。