2014-01-07 128 views
0

我对这个论坛和C++非常新颖。所以请原谅我的疑惑/问题。我正在阅读std::string。我知道我可以使用at[int]运营商访问元素。我有2个问题:阅读std :: string,从std :: string中删除所有特殊字符

1)删除或字符串删除所有特殊字符(包括空格)

2)只读首次从该字符串

为1),我是4个字符或字母检查std::erasestd::remove_if,但我需要消除所有我的意思是特殊字符和空格。这意味着我需要包含所有的条件,如isspace()/isalpha()等等。有没有一种方法可以一次全部删除?对于2),我可以像数组那样访问字符串,我的意思是string [0],string [1],string [2],string [3]。但我不能添加到单个字符串?

请让我知道我该怎么做到这一点?

+0

哪些字符是“特殊字符”? – zch

+0

是的,我的意思是所有在我们的键盘的第二行。 – johnkeere

回答

3

为了得到第四个大字:

std::string first4=str.substr(0, 4); 

要删除任何isspace判断,因而isalpha谓词(虽然我觉得我误解了,在这里,你的意思isspace判断,而不是因而isalpha ??):

str.erase(std::remove_if(str.begin(), str.end(), 
    [](char c) { return std::isspace(c) || std::isalpha(c); }), 
    str.end()); 

可以使用op+=附加到字符串。例如:

str+="hello"; 
str+='c'; 
0

要删除所有特殊字符,为什么不能让像一个方法,以便:

bool isLegal(char c) 
{ 
    char legal[] = {'a', 'A', 'b','B' /*..and so on*/}; 
    int len = sizeof(legal)/sizeof(char); 

    for (int i = 0; i < len; i++) 
    if (c == legal[i]) 
     return true; 
    return false; 
} 

,然后就重复槽字符串,并删除字符不合法?

0

对于1:std :: remove_if将删除给定谓词返回true的所有元素。您提供了谓词函数对象,只要它从容器(char)中取出一个元素并返回一个布尔值,它就可以是您想要的任何对象。

所以,你可以写一个函数,例如:

bool IsNotLegal(const char & stringElement); 

,或者你可以把它写成一个lambda函数,然后你就可以将它传递到std ::的remove_if从满足字符串中删除你的一切条件1通。

std::string myString{"This is my string."}; 
std::remove_if(std::begin(myString), std::end(myString),[](const char & element) 
{ 
    return std::isspace(element) && //any other conditions such as your own IsSpecial(); 
}); 
// now myString has become "Thisismystring."