我想在特定索引处更改 C++ 字符串,如下所示:
string s = "abc";
s[1] = 'a';
以下代码有效吗?这是一种可接受的方式吗?
我没有找到任何说明它有效的参考:
http://www.cplusplus.com/reference/string/string/
这表示通过“字符串中的重载 [] 运算符”我们可以执行写操作。
我想在特定索引处更改 C++ 字符串,如下所示:
string s = "abc";
s[1] = 'a';
以下代码有效吗?这是一种可接受的方式吗?
我没有找到任何说明它有效的参考:
http://www.cplusplus.com/reference/string/string/
这表示通过“字符串中的重载 [] 运算符”我们可以执行写操作。
将字符分配给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::replace
:http ://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 替换了一个字符,一个问号。如果字符串为空白或您分配的内容超出范围,则没有未定义的行为。
是的。您链接的网站有一个关于它的页面。您还可以使用 at 函数,它执行边界检查。
http://www.cplusplus.com/reference/string/string/operator%5B%5D/
是的,您编写的代码是有效的。你也可以试试:
string num;
cin>>num;
num.at(1)='a';
cout<<num;
**Input**:asdf
**Output**:aadf
std::replace 也可用于替换字符。这是参考链接http://www.cplusplus.com/reference/string/string/replace/
希望这可以帮助。
您可以使用子字符串来实现这一点
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"