удалить все символы из строки - PullRequest
0 голосов
/ 15 февраля 2012

Существует ли элегантный способ удаления символов из строки?
Например, как мне получить из foo123bar строку 123?

Я знаю, что есть некоторые подобные вопросы, но я хочу сказать, что я априори не знаю, если присутствует foo или bar.

Ура!

Ответы [ 5 ]

6 голосов
/ 15 февраля 2012

Использование std :: remove_if алгоритм
Вот код:

#include <string>
#include <algorithm>
#include <iostream>
int main(int argc, char**argv)
{
  std::string str("hello123");
  str.erase(std::remove_if(str.begin(),str.end(),isalpha),str.end());
  std::cout<<str<<std::endl;
  return 0;
}

вывод будет:

123
3 голосов
/ 15 февраля 2012

Если у вас есть компилятор с поддержкой C ++ 11, вы можете использовать std::copy_if и lamdas:

std::string str = "foo123bar";
std::string dst;

std::copy_if(str.begin(), str.end(), dst.begin(), [](const char ch) { return !isalpha(ch); });
0 голосов
/ 15 февраля 2012

Полагаю, вы хотите удалить подстроку из строки, а не удалить цифры.

string str = "foo123bar";
string sub = "123";
for (auto it = std::search(str.begin(), str.end(), sub.begin(), sub.end());
     it != str.end();
     it = std::search(str.begin(), str.end(), sub.begin(), sub.end())) { 
       str.erase(it, it + sub.size())
     }
0 голосов
/ 15 февраля 2012

Переберите string и распечатайте не алфавитные символы:

string::iterator iter;

for(iter = myString.begin(); iter != myString.end(); ++iter) {
    if (! isalpha((int)*iter))
        cout << *iter;
}
0 голосов
/ 15 февраля 2012

Я думаю, что использование регулярных выражений слишком мало для этой задачи. Попробуйте:

string filtered;
for (int i = 0; i < str.size(); i++)
{
    if (!isalpha(str[i]))
    {
        filtered.push_back(str[i]);
    }
}

После этого filtered будет содержать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...