Как удалить все внутри <i></i> и () из строки в C? - PullRequest
1 голос
/ 28 июня 2011

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

char *mystring= blah blah <i>(this is not needed)</i> (Nor this). This is.

вернется

char *return_str = blah blah  . This is.

1 Ответ

4 голосов
/ 28 июня 2011

Даже если ваш вопрос помечен regex, , регулярное выражение не является правильным решением .

Что вы, вероятно, хотите сделать, это написать простой автомат с нажатием .

Вот действительно простой пример:

char* strip_parens(char* string) {
    int len = strlen(string);
    char* result = malloc(len + 1);
    int num_parens = 0;
    int i = 0, j = 0;
    for(; i < len; i++) {
        char c = string[i];
        if(c == '(') {
            num_parens++;
        } else if(c == ')' && num_parens > 0) {
            num_parens--;
        } else if(num_parens == 0) {
            result[j] = c;
            j++;
        }
    }
    result[j] = '\0';
    return result;
}

Я даже не уверен, что это квалифицируется как автомат с нажатием кнопки, потому что он использует простой счетчик, а не стек, но концепция похожа.

Это только скобки, но оно должно быть достаточно простым, чтобы продемонстрировать технику.

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