Удалить набор символов из строки

1

Как я могу C++ удалить все указанные символы из строки? Например, если у меня есть строка " &New &York " и я хочу удалить символы из набора {' ','&'}, строка после удаления будет выглядеть как "NewYork". Я предпочитаю не писать функцию, которая выполняет итерацию строки и проверяет каждый символ в строке, если она является частью нежелательного набора.

  • 0
    Возможный дубликат этого
  • 0
    любая функция, которая может существовать, будет выполнять итерацию и проверять каждый символ отдельно. просто нет другого способа сделать это. почему вы хотите избежать этого?
Показать ещё 1 комментарий
Теги:
string

3 ответа

3
Лучший ответ

Вы можете попробовать следующее:

str.erase(
  std::remove_if(str.begin(), str.end(), [](char chr){ return chr == '&' || chr == ' ';}),
  str.end());
  • 0
    Для чего требуется C ++ 11 (который большинство людей пока не могут использовать). (Конечно, довольно просто написать небольшой функциональный объект, чтобы сделать то же самое.)
2

использовать это

#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() );
} 
  • 0
    Который имеет неопределенное поведение. И не обязательно даже компилировать. И не делает то, что он просил.
1

самый простой и, вероятно, самый простой способ сделать это в массиве символов (вы не указали, какая именно ваша "строка", поэтому я предполагаю, что это самый простой тип) будет примерно таким:

#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;
}
  • 0
    Это не просто (много кода) и не просто. Использование std::string и std::replace_if намного проще, и его также легче получить.
  • 0
    @JamesKanze это легко понять даже новичку, если они потратят немного времени, и это, безусловно, ценный опыт обучения для указателей. Кроме того, я еще не тестировал его, но думаю, что он может конкурировать с производительностью std :: replace_if И я имел в виду «простой», как «использует наименьший иностранный код»
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню