![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Rage |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 30.10.2006 Где: Спб Репутация: 1 Всего: 1 |
Доброго времени суток!
Меня очень интересует, как можно поумнее реализовать следующий механизм. Есть некоторая строка std::string и есть определённый набор символов, которые эта строка может содержать, все остальные символы не допускаются.(Если нужна конкретика, то допустимые символы это заглавные буквы, цифры, знаки тире и подчеркивания, а все остальные, соответственно, недопустимые) Так вот,подскажите,пожалуйста,как лучше организовать проверку строки на наличие запрещённых символов ? Мне в голову кроме полного перебора ничего не лезет... Спасибо |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
а кроме полного перебора тут ничего и не придумаеш.
другое дело как хранить/искать разрешенные символы... самый простой (и довольно быстрый вариант) -- засунуть их в std::set и искать по нему. для уменьшения числа поисков можно строку в set свернуть (но будет ли это быстрее -- хз. нужно на практике смотреть) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
В качестве примера могу предложить такой вариант:
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| TimberWolf |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.1.2007 Где: Тула Репутация: нет Всего: нет |
Как вариант ...
|
|||
|
||||
| Rage |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 30.10.2006 Где: Спб Репутация: 1 Всего: 1 |
Огромное спасибо всем за помощь. После долгих мук я всё-таки решил сделать вот так, гляньте:
Вроде работает. Можт какие-нить изъяны увидите - пишите! |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rage, Недозволенных символвов по-моему меньше
|
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Тогда уже так:
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
К примеру,
str="ёмаё\n". Что выдаст последний вариант? -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Последний вариант выдаст содержимое строки str, т.е. ёмаё и переведёт курсор на новую строку. А что тебя смущает ? -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Смущает, что созданный каталог будет отображаться на две строки!
А потом, возвращаясь к первоначальной задаче, нужно будет длишу строки отслеживать, иначе его название вылезет за правый край монитора) кстати, str="Новая папка\0"; оно вообще дастся к созданию? -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
akizelokro, а что мешает добавить символ новой строки '\n' (равно, как и другие, не нужные тебе символы) в строку not_possible?
По-моему, в первоначальной задаче о длине строки ничего не говорилось. А почему нет? -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
| akizelokro |
|
||||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Грешным делом закрыжил такую поделку string s="00000\01\0"; Application->MessageBox("Up",s.c_str()); Воспринимает \01 вместе, а не по раздельности. А жаль! -------------------- a = a + b; b = a - b; a = a - b; |
||||||
|
|||||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Dov, тогда уж так
переносимей. Это сообщение отредактировал(а) Xenon - 10.8.2007, 15:30 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |