Как мне выполнить строковые манипуляции на основе регулярных выражений с ограничением C ++ 03 и без внешних библиотек? - PullRequest
0 голосов
/ 27 октября 2019

У меня есть строка, которой нужно манипулировать, чтобы она была строчной, и заменяю некоторые символы пробелами, используя регулярное выражение.

Эквивалент Java:

str.toLowerCase();
str.replaceAll("[^a-z]", "");
str.replaceAll("\\s", "");

В пределах ограничения c++03и без использования Boost или другой библиотеки, как я могу достичь той же функциональности в C ++? Версия g ++ сервера, на котором я работаю: 4.8.5 20150623.

Строчная строчка проста:

char asciiToLower(char c) {
    if (c <= 'Z' && c >= 'A') {
        return c - ('A' - 'a');
    }
    return c;
}

std::string manipulate(std::string str) {
    for (std::string::iterator it = str.begin(); it != str.end(); ++it) {
        it = asciiToLower(it);
    }
}

А как насчет двух других?

1 Ответ

2 голосов
/ 27 октября 2019

C ++ 03 не поддерживает регулярные выражения. Это было введено в C ++ 11.

Итак, без (а) внешних библиотек или (б) написания движка регулярных выражений самостоятельно, вы не сможете .

* 1006. * Однако, GCC имеет поддержку регулярных выражений с 4.9, в экспериментальном режиме -std=c++0x. Так что, если вы можете переключиться на это, и ваш GCC достаточно новый, возможно, это поможет вам.

(Не думайте, что GCC 4.8 поддерживает его: это не так'; он врет .)

В противном случае я предлагаю вам обновить ваш компилятор. Даже C ++ 11 устарел.

...