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

时间:2013-12-11 15:39:24

标签: c++ string vector struct replace

我是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("|"),"," );
}

2 个答案:

答案 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构造函数,该构造函数从字符串创建实例,但创建这样的隐式构造函数通常是个坏主意。