34

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

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

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

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

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

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

4

4 回答 4

38

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

#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 替换了一个字符,一个问号。如果字符串为空白或您分配的内容超出范围,则没有未定义的行为。

于 2013-08-19T03:12:23.383 回答
2

是的。您链接的网站有一个关于它的页面。您还可以使用 at 函数,它执行边界检查。

http://www.cplusplus.com/reference/string/string/operator%5B%5D/

于 2013-08-19T03:09:06.460 回答
2

是的,您编写的代码是有效的。你也可以试试:

string num;
cin>>num;
num.at(1)='a';
cout<<num;

**Input**:asdf
**Output**:aadf

std::replace 也可用于替换字符。这是参考链接http://www.cplusplus.com/reference/string/string/replace/

希望这可以帮助。

于 2016-08-22T12:26:18.557 回答
0

您可以使用子字符串来实现这一点

  string s = "abc";
  string new_s = s.substr(0,1) + "a" + s.substr(2);
  cout << new_s;
  //you can now use new_s as the variable to use with "aac"
于 2017-05-01T20:45:40.197 回答