![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Нужна замена для std::string.
Работаю над программой, с приогромнейшим кол-вом строковых операций. Юзать "algorithm"-ы терпения не хватает. Кто нибудь, если есть сей класс, поделитесь, ну хоть ссылочкой. Спасибо. Это сообщение отредактировал(а) andrew_121 - 15.6.2008, 01:57 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
ну наваляй что-то типа такого:
блин, че-то [code=cpp] не работает или это у меня только такие глюки? Это сообщение отредактировал(а) anatox91 - 15.6.2008, 09:47 -------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
А чем тебя не устраивает std::string?
-------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
anatox91 - Думал что я не один такой, кого std::string неустраивает. Да, похоже придется ваять нечто STL совместимое.
Добавлено через 1 минуту и 8 секунд bronislav - Да функционал никакой! Вот QString - это тема! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| yar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
std::string можно использовать с Boost String Algorithms Library..
Там много дополнительного функционала, не включённого в STL. --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
|||
|
||||
| anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
QString это BLOB(антипаттерн) алгоритмы + boost и QString нервно курит в сторонке, string конечно то-же огромен, но там практичесски нет функционала для обработки строк, это предпологается делать средствами STL, которые пора-бы уже и знать к тому-же QString только Unicode, иногда нужен ASCII |
|||
|
||||
| andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Lazin
Согласен. Зато функционал какой !!!
Да влом постояно алгоритмы тягать, писанины много! -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
andrew_121, может сделать класс производный от std::string и добавить методы использующие алгоритмы?
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Да, походу так и придется делать. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ASCII иногда приходится использовать для поддержки старых интерфейсов, я сейчас работаю над проектом, в котором используется ascii, так как объемы обробатываемого текста оч. большие, а все программы, которые со мной взаимодействуют юникод не понимают и им все-равно приходится отдавать в cp_1251
стандартные алгоритмы работают с string - find replace for_each... etc всякие split join trim итд есть в boost QString не каждый может себе позволить использовать.. так-что лучше использовать то-что стандартно |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Зачем? Чем сторонняя функция хуже метода? И вообще, есть правило, если имеющегося публичного интерфейса класса достаточно для реализации задачи с помощью внешней функции, то именно так и надо делать. Класс стринг (да, да, именно std::string) вообще считается перегруженным. Большинство встроенных методов там просто не нужны. Чего только стоит наличие двух интерфейсов - под итераторы и под индексы. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
bsa - Как-то влом ипользовать алгоритмы. Проще(мне так кажется), все необходимое впихнуть в класс.
Так от какого наследовать чтоб разные компилеры не ругались? Ну придется, сей хедер с проектом тягать, ну и ладно. Нашел я в инете пару классов замещающих "std::string", ток они староваты, и MSVC-2008 и MinGW32, жутко ругаются на них. Вот, гляжу, пытаюсь понять. Кстати, вот они. "basic_string" - вроди замена стантартной. Это сообщение отредактировал(а) andrew_121 - 15.6.2008, 20:11 Присоединённый файл ( Кол-во скачиваний: 10 )
basic_string.rar 80,89 Kb-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
andrew_121 ну так запихай... наследование никто не отменял.
наследуйся от того что определишь в рантайме) нечто вроде class WMyString::public wstring{}; как вариант примени агрегирование и вынеси то что тебе надо "наружу" вы учитете, что используя нечто "стороннее" есть шанс искать чужие баги.. Это сообщение отредактировал(а) jonie - 15.6.2008, 20:03 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
почему алгоритм это плохо..? в классе string и так около сотни методов, вам мало?
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
отакие вот создали MFC... и, как я понял, в сторону Boost String Algorithms Library ты даже не посмотрел тогда уж пользуй QString |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Lazin - гм... Я их там не больше 10-ти насчитал.
Добавлено через 2 минуты и 8 секунд Alek86 - Именно в сторону Boost String Algorithms я и смотрю. Но вот незадача, мне нужен класс в одном-двух хедерах, а вот Boost тягать с собой совсем неохота! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
andrew_121, конструкторы, операторы и все варианты их перегрузки
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
зря таких монстров в 1 хедере хранить - плохая затея у буста есть утилитка, с помощью котрой можно "вытаскивать" из него определенные библиотеки с их зависимостями плохо считал, что тут скажешь только в стандарте их "туева хуча", а в реализациях и поболя |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Alek86 - Я их насчитал 35.
Но не в этом дело. Все равно, функционал некакущий !!! Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 14:51 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
35? буга.
Чисто для справки перечень ф-ций из драфта. И это только члены класса std::string'а. Про операторы молчу 21.3 @ c++-draft-nov2006-n2135.txt
причем около сотни следует читать лишь как "больше сотни". Это сообщение отредактировал(а) Mayk - 16.6.2008, 15:00 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
а какой нужен функционал? |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Mayk - Я имел ввиду, поименно. Ну а если посчитать ВСЕ, то ДА, огого...
Повторюсь: Все равно, функционал некакущий !!! Не регулярных выражений, ни сдвигов...т.е. МАЛОВАТО !!! Блин, ну поймите - проект, с приогромнейшим кол-вом строковых операций. Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 16:26 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ты уж меня извини, но гда ты видел рег. выражения в строковом классе. а если я их в программе не использую? В общем почитай про антипатерн blob. Пс есть boost::regex есть boost::xpression, что то подобное есть в QString? Или в каком нибудь другом строковом классе... вставить нужное количество пробелов не судьба?
ну, QString вообще-то не бывает без Qt.. проблема-то в чем? Штука в том, что string и алгоритмы - header only, что очень сильно тебе упрощает задачу, а ты сопротивляешься этому |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Понял. Нужно писать свой класс. Унаследоваться от std::string, впихнуть в него все что нужно.
Alek86
А чё за зверь? Как звать? И много за собой тянет? Думал тему закрыть, но нет, Буду сюда писать вопросы по реализации сего класса. Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 17:04 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Ты ничего не понял. Ну ничего, скоро поймешь. Кстати, было на баше как-то про админов: админы делятся на два типа: тех, которые уже делают бекапы, и тех, которые еще не делают. Выводы сделай сам. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
За тебя уже всё реализовано, что ты собираешься реализовывать? |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
bsa, JackYF - Вам смешно. А мне совсем не до смеха. При виде кусков кода по разбору, и парсингу std::string !!!
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
andrew_121, зачем стринг разбирать и более того, парсить? Нужно выделить какой-то элемент - напиши функцию, которая это делает. И будет все понятно. Как ты ее напишешь - сугубо на твоей совести, главное, чтобы в основном теле программы прослеживался алгоритм, и не было лишних отвлечений на всякие ненужные в данном месте детали.
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
все, я сюда больше не пишу распинался, распинался и бестолку, на всякий случай - информация к размышлению блин, да-же в .NET строки не умеют столько, сколько ты хочешь |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Замечательно сказано Пограмма - html, php - парсер. Типа препроцессора у нас, у программеров. В программе 14248 строк. Писана не мной. Есть шесть глюков. Когда я начал пялиться в код....это было что-то... Код, до того безобразно написан, что я, каждый файл, форматирую(вручную), и походу выискиваю бяки. У меня внатуре дилемма !!! Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 19:55 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
Ну в принципе не так уж и много Я как-то программу на Delphi на 16к строк перевел на C++ за 3 недели Правда впетчатления те еще -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Следовало внести в книгу рекордов(настойчивости). -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bronislav |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 29.1.2008 Где: Украина::Донецк Репутация: нет Всего: 3 |
Вообще-то для таких вещей есть рефакторинг. Тот же еклипс умеет автоматически переформатировать код в соостветствии с выбранным стилем -------------------- ![]() иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Так я в ручную, для того-что бы понять, и вкурить сею рукопись.(ух как заговорил) -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
мы отошли от темы.
я уже упоминал правило, если какую-то задачу можно решить отдельной функцией с использованием открытого интерфейса класса, то так и надо делать. Более того, даже оператор сложения надо определять внешней функцией (так как есть конструктор копирования и метод конкатенции). Кстати запись text.extractValue("name", &var); по длине равна: extractValue(text, "Name", &var); Зато вторая не перегружает интерфейс класса лишним. Что тебе еще надо? toInt, toDouble? Ну если тебе кажется boost::lexical_cast слижком громоздким, то напиши для него соответствующие враперы:
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
bsa - Спасибо.
Решено - boost respect ! Alek86
Кто нибудь знает что это за тулза такая? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
andrew_121, зачем тебе эта утилита?
Пишешь в документации к проекту, что для его сборки нужен boost, версии не ниже такой-то. И все. Остальное на совести тех, кто будет собирать. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Всем приогромнейшее Спасибо.
Тема закрыта. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
опоздал, но все же
сюда смотри
нуну и часто ты буст обновляешь? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
когда выходят новые версии, а теперь представь, что мне еще что-нибудь захотелось из буста использовать, мне еще вырезать кусочек))
в общем это очень не для всех... Это сообщение отредактировал(а) Lazin - 17.6.2008, 10:34 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
я про это и говорил - человек не хочет весь буст с собой таскать а зачем его обновлять, если, допустим, операции для строк не поменялись? или поменялись, но тебе те изменения побоку твое же и так работает ну ты прям щас как автор темы насчет класса строк говоришь чтобы таксать с собой этакую God Library, в которой есть все для того, чтобы "если что" не нужно было добавлять лишние файлы |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
архив трудно распаковать? странные вы люди, значит буст с собой таскать как библиотеку - зло, а отрезать от него кусок и сделать частью своего проекта - гут знаешь, класс и набор библиотек - немного разные вещи)) |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Lazin, дело говорит, мало ли потом придется использовать некую вещь из буста, которая будет дергать функционал который ты выдрал, а этот функционал поменял немного свое поведение и теперь они не совместимы.. Вообщем не вижу никаких проблем в таскании буста за собой.
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Обсолютно согласен. Осознал. Нет смысла. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |