我是C++的新手,我被卡住了。用,
替换|
时出现问题。我找到|
没有问题,但替换功能似乎不起作用。我做错了什么?感谢您的帮助。
头文件:
struct Document
{
string text;
int NumLines;
};
struct Find {
const string text;
Find(const string& text) : text(text) {}
bool operator()(const Document& j) const {
return j.text == text;
}
};
class DataRecord
{
private:
vector <Document> field;
public:
void Replace();
}
cpp。此功能的文件
void DataRecord::Replace ()
{
vector<Document>::iterator it = replace(field.begin(),field.end(),Find("|"),"," );
}
您正在尝试的内容尚不清楚,但如果您只想将field
中每个Document
中的","
替换为所有"|"
,那么最简单的方法可能是循环:
for (auto& f : field) :
std::replace(f.text.begin(), f.text.end(), '|', ',');
如果我理解正确,您正试图用字符串文字替换序列fields
中的文档。这不起作用。
std::replace
语义:
std::replace(It begin, It end, Predicate P, Value v)
其中:
*begin
(以及序列中的任何元素[begin,end))产生类型为Value
的值谓词的语义为
P(const Value&) -> bool
。应该设置的值中的
v
,而不是与谓词匹配的元素。
在您的情况下,第四个参数(v
)的类型应该是Document
,而不是字符串文字。
您应该创建一个文档实例,指定应该用什么来替换与谓词匹配的文档实例(因为您不能用字符串实例或字符串文字来替换它们)。
编辑:或者,您可以添加一个从字符串创建实例的隐式Document构造函数,但创建这样的隐式构造函数通常是个坏主意。