我是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("|"),"," );
}
答案 0 :(得分:1)
您尝试的内容尚不清楚,但如果您要做的只是替换"|"
中","
中Document
的所有field
,那么最简单方法可能是一个循环:
for (auto& f : field) :
std::replace(f.text.begin(), f.text.end(), '|', ',');
答案 1 :(得分:0)
如果我理解正确,您正尝试使用字符串文字替换序列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实例(因为您不能用字符串实例或字符串文字替换它们)。
编辑:或者,您可以添加一个隐式的Document构造函数,该构造函数从字符串创建实例,但创建这样的隐式构造函数通常是个坏主意。