替换结构C++向量中的字符串



我是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构造函数,但创建这样的隐式构造函数通常是个坏主意。

最新更新