从字符串 C++ 向量中替换字符串
Replace a string from a vector of string C++
>我有一个字符串向量,使用以下命令构造:
vector<string> names;
names.push_back("Gates");
names.push_back("Jones");
names.push_back("Smith");
names.push_back("Gates");
我想用"比尔"代替"盖茨",因为每次出现"盖茨"。为此,我知道最简单的解决方案是使用算法中的替换函数并将其用作:
replace(names.begin(), names.end(), "Gates", "Bill");
但是我收到以下错误:
parameter type mismatch:incompatible types 'const char (&)[6]' and 'const char[5]'.
我可以使用隐式类型转换来解决它,如下所示:
replace(names.begin(), names.end(), "Gates", (const char (&)[6]) "Bill");
任何人都可以解释这个错误是什么,以及解决它的更好方法或更好的方法。或者为什么我们需要这种类型的铸造。
std::replace
中的旧/新值参数共享相同的类型。
例如,该函数可能如下所示:
template<class ForwardIt, class T>
void replace(ForwardIt first, ForwardIt last, const T& old_value, const T& new_value);
从这里偷来的,并不是那么重要。
"gates"
是const char[6]
但bill
是const char[5]
,这就是为什么您收到有关无法转换它的错误的原因。
您可以将每个字符串文本包装在 std::string()
中,也可以仅使用一元+
运算符将每个文本衰减为const char*
。
replace(names.begin(), names.end(), +"Gates", +"Bill"); //shorter
replace(names.begin(), names.end(), std::string("Gates"), std::string("Bill")); //clearer
我很确定((const char (&)[6]) "Bill")
违反了严格的混叠,所以我会避免在这样的数组类型之间进行转换。
我会建议(假设一些using std;
(
replace(names.begin(), names.end(), string{"Gates"}, string{"Bill"});
由于"Gates"
的类型是char[6]
(衰减到char*
(,并且您想替换std::string
-s(不是char*
!!
相关文章:
- 如何使用regex_replace将子字符串替换为字符串中的另一个子字符串,同时保持整个文本完整?
- 使用C++将一个字符串替换为另一个字符串
- 简单的字符串替换给出错误,尽管参数正确
- UnicodeString 将一个子字符串替换为另一个子字符串
- C++字符串.替换生成"No matching function for call"错误
- std::字符串替换不保留结尾?
- GCC Bug,使用尖括号通过宏包含标头时"linux"路径中的字符串"<>"替换为 "1"
- 字符串替换问题
- 将带双引号的字符串替换为带双引号的字符串
- 如何在C++中将字符串替换为"Match case"和"Match whole word"
- 字符串替换和奇怪的字符
- C++中的字符串反转不将旧字符串替换为新字符串
- 用c++字符串替换snprintf
- 字符串::替换在有效的迭代器上抛出 std::out_of_range
- 简单的标准::字符串替换在C++
- C++字符串替换函数无限循环
- 分析字符串替换内存泄漏
- C++:-用另一个字符串替换一段字符串
- 提升字符串替换不会用字符串替换换行符
- C++中任意长度字符串的字符串替换