Как я могу C++ удалить все указанные символы из строки? Например, если у меня есть строка " &New &York "
и я хочу удалить символы из набора {' ','&'}
, строка после удаления будет выглядеть как "NewYork"
. Я предпочитаю не писать функцию, которая выполняет итерацию строки и проверяет каждый символ в строке, если она является частью нежелательного набора.
Вы можете попробовать следующее:
str.erase(
std::remove_if(str.begin(), str.end(), [](char chr){ return chr == '&' || chr == ' ';}),
str.end());
использовать это
#include <string>
#include <algorithm>
#include <cctype>
int main()
{
std::string s = "the#qu1ck&br0wn ***fox %%jumped 0ver @@the lazy dog";
s.erase( std::remove_if(s.begin(), s.end(), std::isalnum),
s.end() );
}
самый простой и, вероятно, самый простой способ сделать это в массиве символов (вы не указали, какая именно ваша "строка", поэтому я предполагаю, что это самый простой тип) будет примерно таким:
#include <cstring>
void erase(char *str, char *evilchars)
{
char *ptr1 = str;
char *ptr2 = str;
while(*ptr1)
{
*ptr2 = *ptr1;
if(!strchr(evilchars, *ptr1))
++ptr2;
++ptr1;
}
*ptr2 = 0;
}
std::string
и std::replace_if
намного проще, и его также легче получить.