Я хочу удалить символы «(», «)» и «-» из строки.
Вы можете использовать алгоритм std::remove_if()
, чтобы удалить только символыВы указываете:
#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
}
Алгоритм std::remove_if()
требует чего-то, называемого предикатом, который может быть указателем на функцию, подобным приведенному выше фрагменту.
Вы также можете передать объект функции (объект, который перегружает вызов функции ()
оператором).Это позволяет нам создать еще более общее решение:
#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
}
Вы можете указать, какие символы удалять со строкой "()- "
.В приведенном выше примере я добавил пробел для удаления пробелов, а также скобок и тире.