从字符串 C++ 向量中替换字符串

Replace a string from a vector of string C++

本文关键字:字符串 替换 C++ 向量      更新时间:2023-10-16

>我有一个字符串向量,使用以下命令构造:

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]billconst 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*!!