Je souhaite supprimer les caractères "(", ")" et "-". de la chaîne de caractères.
Vous pouvez utiliser le std::remove_if()
pour ne supprimer que les caractères spécifiés :
#include <iostream>
#include <algorithm>
#include <string>
bool IsParenthesesOrDash(char c)
{
switch(c)
{
case '(':
case ')':
case '-':
return true;
default:
return false;
}
}
int main()
{
std::string str("(555) 555-5555");
str.erase(std::remove_if(str.begin(), str.end(), &IsParenthesesOrDash), str.end());
std::cout << str << std::endl; // Expected output: 555 5555555
}
En std::remove_if()
nécessite ce que l'on appelle un prédicat, qui peut être un pointeur de fonction comme dans l'extrait ci-dessus.
Vous pouvez également passer un fonction objet (un objet qui surcharge l'appel de fonction ()
). Cela nous permet de créer une solution encore plus générale :
#include <iostream>
#include <algorithm>
#include <string>
class IsChars
{
public:
IsChars(const char* charsToRemove) : chars(charsToRemove) {};
bool operator()(char c)
{
for(const char* testChar = chars; *testChar != 0; ++testChar)
{
if(*testChar == c) { return true; }
}
return false;
}
private:
const char* chars;
};
int main()
{
std::string str("(555) 555-5555");
str.erase(std::remove_if(str.begin(), str.end(), IsChars("()- ")), str.end());
std::cout << str << std::endl; // Expected output: 5555555555
}
Vous pouvez spécifier les caractères à supprimer à l'aide de l'option "()- "
chaîne de caractères. Dans l'exemple ci-dessus, j'ai ajouté un espace pour que les espaces soient supprimés ainsi que les parenthèses et les tirets.