C++ 如何使用字符串::替换为字符*
我试图用char*替换子字符串,strng::replace拒绝接受任何不是常量字符串的内容*C++ 如何使用字符串::替换为字符*,c++,string,visual-c++,std,C++,String,Visual C++,Std,我试图用char*替换子字符串,strng::replace拒绝接受任何不是常量字符串的内容* map<string,char *> renamed_files; map<string,char *>::iterator rename_it; 不,地图上的键是const。因此问题在于rename\u it->first是常量,而replace当然是非常量成员函数 如果您以某种方式对其进行修改,则会更改条目在地图中的正确位置,但地图无法检测到您正在更改字符串,
map<string,char *> renamed_files;
map<string,char *>::iterator rename_it;
不,地图上的键是const。因此问题在于
rename\u it->first
是常量,而replace
当然是非常量成员函数
如果您以某种方式对其进行修改,则会更改条目在地图中的正确位置,但地图无法检测到您正在更改字符串,因此无法移动条目。为了避免整个问题,禁止修改
您可以删除该条目,然后添加具有不同键但值相同的新条目。执行此操作时,请注意迭代器的有效性。否,映射中的键是const。因此问题在于
rename\u it->first
是常量,而replace
当然是非常量成员函数
如果您以某种方式对其进行修改,则会更改条目在地图中的正确位置,但地图无法检测到您正在更改字符串,因此无法移动条目。为了避免整个问题,禁止修改
您可以删除该条目,然后添加具有不同键但值相同的新条目。在执行此操作时,请注意迭代器的有效性。您指的是const char*。。正确的?为什么不使用const_cast将char*转换为const char*?您真的想更改密钥吗?即使如此,我还是尝试进行字符串替换,它根本不是编译,它给我的错误是string::replace无法识别11种重载类型中的任何一种。另外,在上面的代码中,
strpath
是用垃圾初始化的,因为cPath
是垃圾。这不可能是你的意图。@johndilling:我想换钥匙,你说得对。这是一种糟糕的编码。但是,cPath在程序的其他地方被修改了,但是我没有提到它。你是说const char*。。正确的?为什么不使用const_cast将char*转换为const char*?您真的想更改密钥吗?即使如此,我还是尝试进行字符串替换,它根本不是编译,它给我的错误是string::replace无法识别11种重载类型中的任何一种。另外,在上面的代码中,strpath
是用垃圾初始化的,因为cPath
是垃圾。这不可能是你的意图。@johndilling:我想换钥匙,你说得对。这是一种糟糕的编码。但是,cPath在程序的其他地方被修改了,但是我没有提到它。
rename_it = renamed_files.begin();
char cPath[1024];
string strpath = cPath;
rename_it->first.replace(0,len, strpath);