Russian Qt Forum

Программирование => С/C++ => Тема начата: iks от Март 11, 2011, 09:44



Название: [решено]c++ удалить нечитаемые символы
Отправлено: iks от Март 11, 2011, 09:44
Помогите с таким вопросом, только разбиратся в чистом c++ стал.
Нужен аналог PHPшного
Код:
preg_replace('/[^ -}А-я]/e','',$str);


Название: Re: c++ удалить нечитаемые символы
Отправлено: Пантер от Март 11, 2011, 10:05
Заюзать какую-либо либу с регекспами: RegExLib, Qt, Boost, etc.


Название: Re: c++ удалить нечитаемые символы
Отправлено: iks от Март 11, 2011, 10:10
это cgi поэтому нужен чистый с++, сейчас смотрю
Код:
char str[]="nu C++ i zaraza..";
int n=strlen(str); //длина строки
replace(str, str+n,  'z' , 'Z');
cout<<str<<endl;
но тут замена по одному символу, если не найду что-то в куче заменяющее придется пробегать простым перебором заменяемых символов


Название: Re: c++ удалить нечитаемые символы
Отправлено: Пантер от Март 11, 2011, 10:25
Можно заменяемые символы в string собрать и сделать по нему цикл. Это я про перебор. Но лучше либу заюзать.


Название: Re: c++ удалить нечитаемые символы
Отправлено: iks от Март 11, 2011, 10:29
Спасибо, посмотрю сейчас, или цикл запущю, а если не лень будет, посмотрю исходник индейца, что там творит preg_replace и каким боком реализована, хотя кажется простым циклом заряжена и в нем


Название: Re: c++ удалить нечитаемые символы
Отправлено: iks от Март 11, 2011, 14:22
Ну вот простой код получается
Код:
    string str ="Проверка [что из <этого> вы`йдет";
    char provStr[] = "^[`<>";
    for(int i=0; i<strlen(provStr); i++)
        replace(str.begin(), str.end(), provStr[i] , ' ');
    //--удалим лишнии пробелы
    for (string::iterator it = str.begin(); it<str.end(); ++it ){
        if (*it == ' ') str.erase(it);
    }
    cout << str << endl;


Название: Re: c++ удалить нечитаемые символы
Отправлено: Пантер от Март 11, 2011, 14:25
Ошибочка. :)


Название: Re: c++ удалить нечитаемые символы
Отправлено: iks от Март 11, 2011, 14:42
Все нет ошибки и с русским подружил нормально


Название: Re: [решено]c++ удалить нечитаемые символы
Отправлено: Пантер от Март 11, 2011, 14:58
Лучше сделай через replace_if (http://www.cplusplus.com/reference/algorithm/replace_if/)