如何在向量元素中查找和擦除某个字符

时间:2015-05-25 12:57:46

标签: c++

如您所知,我们使用std :: find来查找元素。
但是假设我们有一个向量,我们想找到一个像#34; ^"在该向量的元素中。
那我们怎么能这样做呢?

例如,看看这段代码:

int main () {
    vector<string> myvector;

    myvector.push_back("a^b");
    myvector.push_back("a");
    myvector.push_back("cd^");

    myvector.erase(find (myvector.begin(), myvector.end(), "^"));

    for (unsigned i=0; i<myvector.size(); i++)
      std::cout << ' ' << myvector.at(i) << "\t";

    return 0;
}

如你所见,我只想找到并删除所有&#34; ^&#34;人物,但我不知道如何。

4 个答案:

答案 0 :(得分:4)

由于您要删除每个字符串中的字符,vector::erase不会帮助您 - 这只能让您删除完全"^"的字符串。您必须迭代string中的每个vector,然后使用erase-remove idiom

for (auto& str : myvector) {
    str.erase(std::remove(str.begin(), str.end(), '^'), str.end());
}

如果你不能使用C ++ 11,你可以编写一个函数来进行擦除:

void erase_carets(std::string& str) {
    str.erase(std::remove(str.begin(), str.end(), '^'), str.end());
}

std:for_each(myvector.begin(), myvector.end(), erase_carets);

答案 1 :(得分:0)

你必须使用带有c11功能的std算法

for (string& str : myvector){
  str.erase(std::remove(str.begin(), str.end(), '^'),str .end());
}

它应该有用

答案 2 :(得分:0)

除了Barry的答案之外,如果你有提升作为替代方案,遍历你的矢量容器并使用boost::erase_all下定义的boost/algorithm/string.hpp

for(auto& i : myvector)
    boost::erase_all(i, "^");

答案 3 :(得分:-2)

$c = "" .ipToCountry($ip); echo $c;