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