Russian Qt Forum
Май 11, 2024, 07:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено]c++ удалить нечитаемые символы  (Прочитано 8151 раз)
iks
Гость
« : Март 11, 2011, 09:44 »

Помогите с таким вопросом, только разбиратся в чистом c++ стал.
Нужен аналог PHPшного
Код:
preg_replace('/[^ -}А-я]/e','',$str);
« Последнее редактирование: Март 11, 2011, 14:43 от iks » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 11, 2011, 10:05 »

Заюзать какую-либо либу с регекспами: RegExLib, Qt, Boost, etc.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
iks
Гость
« Ответ #2 : Март 11, 2011, 10:10 »

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Март 11, 2011, 10:25 »

Можно заменяемые символы в string собрать и сделать по нему цикл. Это я про перебор. Но лучше либу заюзать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
iks
Гость
« Ответ #4 : Март 11, 2011, 10:29 »

Спасибо, посмотрю сейчас, или цикл запущю, а если не лень будет, посмотрю исходник индейца, что там творит preg_replace и каким боком реализована, хотя кажется простым циклом заряжена и в нем
Записан
iks
Гость
« Ответ #5 : Март 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;
« Последнее редактирование: Март 11, 2011, 15:32 от iks » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Март 11, 2011, 14:25 »

Ошибочка. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
iks
Гость
« Ответ #7 : Март 11, 2011, 14:42 »

Все нет ошибки и с русским подружил нормально
« Последнее редактирование: Март 11, 2011, 19:06 от iks » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Март 11, 2011, 14:58 »

Лучше сделай через replace_if
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.