从字符串修改字符数组
问题描述:
我想初始化一个字符串,然后修改生成的字符数组。我做了:从字符串修改字符数组
std::string str = "hello world";
const char* cstr = str.c_str();
// Modify contents of cstr
但是,因为cstr是const,所以我不能修改元素。如果我删除const,我不能使用c_str()
。
达到此目的的最佳方法是什么?
答
最好的和最直接的方式做到这一点是利用自身operator[]
只是直接修改std::string
:
str[0] = 'G'; // "Gello world"
如果你真的需要复制C-串,无论出于何种原因,那么你必须创建一个新的缓冲区,例如:
char* buffer = new char[str.length() + 1];
strcpy(buffer, str.c_str());
delete[] buffer;
这里的一个明显缺陷是动态分配。只需坚持直接修改std::string
,这就是班级的写作内容,让您的生活更轻松。
+0
@RemyLebeau谢谢。 –
为什么你不能修改字符串本身? –
*达到此目的的最佳方法是什么?*请直接修改'std :: string'。 – NathanOliver
可以用'const_cast'来做到这一点,然而,这是一个非常非常糟糕的主意,因为字符串中的内部成员会认为只有他们正在修改缓冲区,并且取决于您如何更改它,您可能会意外后来的奇怪行为。 (不要问我怎么知道,我宁愿不再考虑它,) – Donnie