从字符串C ++向量中删除特殊字符

时间:2015-07-08 13:52:39

标签: c++ string vector special-characters

我正在尝试从向量中的字符串中删除特殊字符。我在如何准确删除特殊字符时遇到问题。我有一个矢量字;其中包含纯文本中的单词,我想删除?!.,;等特殊字符,也删除空格。

3 个答案:

答案 0 :(得分:1)

反复删除单个字符并不是很快。可以通过创建新字符串并向其添加非特殊字符来完成该任务:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  vector<string> words;
  words.push_back("");
  words.push_back("452346457");
  words.push_back(",.,;,;.;,;.;.?");
  words.push_back(";m;,./,/;,m;m,/,./,;");

  string special = string("?:,.;");

  for (string::size_type i = 0; i < words.size(); ++i)
  {
    string temp = words[i];
    words[i] = "";
    for (string::size_type j = 0; j < temp.size(); ++j)
    {
      if (special.find(temp[j]) == string::npos)
      {
        words[i] += temp[j];
      }
    }
  }

  for (string::size_type i = 0; i < words.size(); ++i)
  {
    cout << "\"" << words[i] << "\"\n";
  }
}

注意使用非常有用的find函数。

答案 1 :(得分:0)

你可以浏览你的矢量并使用

for(int p = 0; p < words.size(); p++)
{
   for(int i = 0; i < words[p].length(); i++)
   { 
      if(words[p][i] == ' ' || ...)
      {
            words[p].erase(i, 1);
            i--;
      }
   }
}

而不是...将要删除的其他特殊字符放入其中,以便找到所有这些字符。

Here是有关擦除的更多信息。基本上,第一个参数是您要擦除的第一个字符的位置,第二个参数是要擦除的字符数。

答案 2 :(得分:0)

一般算法如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

    int main()
    {
        vector<string> v;
        // get data into v

        for (auto& s : v){
          for (auto i = s.begin(); i != s.end(); ++i){
             if (*i == '?' || *i == '!'){
                 i = s.erase(i);
             }
          }
        }

    }
相关问题