C ,在特定索引处更改字符串的最佳方法

新手上路,请多包涵

我想在特定索引处更改 C++ 字符串,如下所示:

 string s = "abc";
s[1] = 'a';

以下代码有效吗?这是一种可接受的方式吗?

我没有找到任何说明它有效的参考:

http://www.cplusplus.com/reference/string/string/

这表示通过“字符串中的重载 [] 运算符”我们可以执行写操作。

原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 742
2 个回答

在索引处将字符分配给 std::string 将产生正确的结果,例如:

 #include <iostream>
int main() {
    std::string s = "abc";
    s[1] = 'a';
    std::cout << s;
}

对于那些怀疑我的 IDE/库设置的人,请参阅 jdoodle 演示: http ://jdoodle.com/ia/ljR 和屏幕截图: https ://imgur.com/f21rA5R

打印 aac 。缺点是如果字符串 s 是空白字符串或者您写得太远,您可能会意外写入未分配的内存。 C++ 很乐意注销字符串的结尾,这会导致未定义的行为。

更安全的方法是使用 string::replacehttp ://cplusplus.com/reference/string/string/replace

例如

#include <iostream>
int main() {
    std::string s = "What kind of king do you think you'll be?";
    std::string s2 = "A good king?";
    //       pos len str_repl
    s.replace(40, 1, s2);
    std::cout << s;
    //prints: What kind of king do you think you'll beA good king?
}

replace 函数获取字符串 s,并在位置 40 处用字符串 s2 替换了一个字符,一个问号。如果字符串为空白或您分配的内容超出范围,则没有未定义的行为。

原文由 Eric Leschinski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题