| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Нужна замена для std::string |
| Автор: andrew_121 15.6.2008, 01:56 |
| Нужна замена для std::string. Работаю над программой, с приогромнейшим кол-вом строковых операций. Юзать "algorithm"-ы терпения не хватает. Кто нибудь, если есть сей класс, поделитесь, ну хоть ссылочкой. Спасибо. |
| Автор: anatox91 15.6.2008, 09:23 | ||
ну наваляй что-то типа такого:
блин, че-то [code=cpp] не работает или это у меня только такие глюки? |
| Автор: bronislav 15.6.2008, 09:26 |
| А чем тебя не устраивает std::string? |
| Автор: andrew_121 15.6.2008, 10:07 |
| anatox91 - Думал что я не один такой, кого std::string неустраивает. Да, похоже придется ваять нечто STL совместимое. Добавлено через 1 минуту и 8 секунд bronislav - Да функционал никакой! Вот QString - это тема! |
| Автор: yar 15.6.2008, 10:23 |
| std::string можно использовать с http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo.html.. Там много дополнительного функционала, не включённого в STL. |
| Автор: anatox91 15.6.2008, 10:36 |
насчет этого согласен |
| Автор: Lazin 15.6.2008, 11:43 |
QString это BLOB(антипаттерн) алгоритмы + boost и QString нервно курит в сторонке, string конечно то-же огромен, но там практичесски нет функционала для обработки строк, это предпологается делать средствами STL, которые пора-бы уже и знать к тому-же QString только Unicode, иногда нужен ASCII |
| Автор: andrew_121 15.6.2008, 11:49 | ||||
Lazin
Согласен. Зато функционал какой !!!
Да влом постояно алгоритмы тягать, писанины много! |
| Автор: Mayk 15.6.2008, 11:54 |
| Автор: georain 15.6.2008, 15:16 |
| andrew_121, может сделать класс производный от std::string и добавить методы использующие алгоритмы? |
| Автор: andrew_121 15.6.2008, 16:31 | ||
Да, походу так и придется делать. |
| Автор: Lazin 15.6.2008, 16:35 |
| ASCII иногда приходится использовать для поддержки старых интерфейсов, я сейчас работаю над проектом, в котором используется ascii, так как объемы обробатываемого текста оч. большие, а все программы, которые со мной взаимодействуют юникод не понимают и им все-равно приходится отдавать в cp_1251 стандартные алгоритмы работают с string - find replace for_each... etc всякие split join trim итд есть в boost QString не каждый может себе позволить использовать.. так-что лучше использовать то-что стандартно |
| Автор: bsa 15.6.2008, 19:31 | ||
Зачем? Чем сторонняя функция хуже метода? И вообще, есть правило, если имеющегося публичного интерфейса класса достаточно для реализации задачи с помощью внешней функции, то именно так и надо делать. Класс стринг (да, да, именно std::string) вообще считается перегруженным. Большинство встроенных методов там просто не нужны. Чего только стоит наличие двух интерфейсов - под итераторы и под индексы. |
| Автор: andrew_121 15.6.2008, 19:57 | ||
bsa - Как-то влом ипользовать алгоритмы. Проще(мне так кажется), все необходимое впихнуть в класс.
Так от какого наследовать чтоб разные компилеры не ругались? Ну придется, сей хедер с проектом тягать, ну и ладно. Нашел я в инете пару классов замещающих "std::string", ток они староваты, и MSVC-2008 и MinGW32, жутко ругаются на них. Вот, гляжу, пытаюсь понять. Кстати, вот они. "basic_string" - вроди замена стантартной. |
| Автор: jonie 15.6.2008, 20:02 |
| andrew_121 ну так запихай... наследование никто не отменял. наследуйся от того что определишь в рантайме) нечто вроде class WMyString::public wstring{}; как вариант примени агрегирование и вынеси то что тебе надо "наружу" вы учитете, что используя нечто "стороннее" есть шанс искать чужие баги.. |
| Автор: Lazin 15.6.2008, 20:46 |
| почему алгоритм это плохо..? в классе string и так около сотни методов, вам мало? |
| Автор: Alek86 16.6.2008, 12:06 |
отакие вот создали MFC... и, как я понял, в сторону Boost String Algorithms Library ты даже не посмотрел тогда уж пользуй QString |
| Автор: andrew_121 16.6.2008, 12:27 |
| Lazin - гм... Я их там не больше 10-ти насчитал. Добавлено через 2 минуты и 8 секунд Alek86 - Именно в сторону Boost String Algorithms я и смотрю. Но вот незадача, мне нужен класс в одном-двух хедерах, а вот Boost тягать с собой совсем неохота! |
| Автор: Lazin 16.6.2008, 12:38 |
| andrew_121, конструкторы, операторы и все варианты их перегрузки |
| Автор: Alek86 16.6.2008, 12:40 |
зря таких монстров в 1 хедере хранить - плохая затея у буста есть утилитка, с помощью котрой можно "вытаскивать" из него определенные библиотеки с их зависимостями плохо считал, что тут скажешь только в стандарте их "туева хуча", а в реализациях и поболя |
| Автор: andrew_121 16.6.2008, 14:43 |
| Alek86 - Я их насчитал 35. Но не в этом дело. Все равно, функционал некакущий !!! |
| Автор: Mayk 16.6.2008, 14:59 | ||
| 35? буга. Чисто для справки перечень ф-ций из драфта. И это только члены класса std::string'а. Про операторы молчу 21.3 @ c++-draft-nov2006-n2135.txt
причем около сотни следует читать лишь как "больше сотни". |
| Автор: Lazin 16.6.2008, 15:14 |
а какой нужен функционал? |
| Автор: andrew_121 16.6.2008, 15:22 |
| Mayk - Я имел ввиду, поименно. Ну а если посчитать ВСЕ, то ДА, огого... Повторюсь: Все равно, функционал некакущий !!! Не регулярных выражений, ни сдвигов...т.е. МАЛОВАТО !!! Блин, ну поймите - проект, с приогромнейшим кол-вом строковых операций. |
| Автор: andrew_121 16.6.2008, 17:01 | ||
| Понял. Нужно писать свой класс. Унаследоваться от std::string, впихнуть в него все что нужно. Alek86
А чё за зверь? Как звать? И много за собой тянет? Думал тему закрыть, но нет, Буду сюда писать вопросы по реализации сего класса. |
| Автор: bsa 16.6.2008, 17:07 | ||
Ты ничего не понял. Ну ничего, скоро поймешь. Кстати, было на баше как-то про админов: админы делятся на два типа: тех, которые уже делают бекапы, и тех, которые еще не делают. Выводы сделай сам. |
| Автор: JackYF 16.6.2008, 17:25 |
За тебя уже всё реализовано, что ты собираешься реализовывать? |
| Автор: andrew_121 16.6.2008, 17:32 |
| bsa, JackYF - Вам смешно. А мне совсем не до смеха. При виде кусков кода по разбору, и парсингу std::string !!! |
| Автор: bsa 16.6.2008, 17:37 |
| andrew_121, зачем стринг разбирать и более того, парсить? Нужно выделить какой-то элемент - напиши функцию, которая это делает. И будет все понятно. Как ты ее напишешь - сугубо на твоей совести, главное, чтобы в основном теле программы прослеживался алгоритм, и не было лишних отвлечений на всякие ненужные в данном месте детали. |
| Автор: Lazin 16.6.2008, 18:47 | ||
все, я сюда больше не пишу распинался, распинался и бестолку, на всякий случай - http://en.wikipedia.org/wiki/God_object к размышлению блин, да-же в .NET строки не умеют столько, сколько ты хочешь |
| Автор: andrew_121 16.6.2008, 19:24 |
Замечательно сказано Пограмма - html, php - парсер. Типа препроцессора у нас, у программеров. В программе 14248 строк. Писана не мной. Есть шесть глюков. Когда я начал пялиться в код....это было что-то... Код, до того безобразно написан, что я, каждый файл, форматирую(вручную), и походу выискиваю бяки. У меня внатуре дилемма !!! |
| Автор: bronislav 16.6.2008, 19:49 |
Ну в принципе не так уж и много Я как-то программу на Delphi на 16к строк перевел на C++ за 3 недели Правда впетчатления те еще |
| Автор: andrew_121 16.6.2008, 19:53 | ||
Следовало внести в книгу рекордов(настойчивости). |
| Автор: bronislav 16.6.2008, 19:56 |
Вообще-то для таких вещей есть рефакторинг. Тот же еклипс умеет автоматически переформатировать код в соостветствии с выбранным стилем |
| Автор: andrew_121 16.6.2008, 20:04 | ||
Так я в ручную, для того-что бы понять, и вкурить сею рукопись.(ух как заговорил) |
| Автор: bsa 16.6.2008, 20:25 | ||
| мы отошли от темы. я уже упоминал правило, если какую-то задачу можно решить отдельной функцией с использованием открытого интерфейса класса, то так и надо делать. Более того, даже оператор сложения надо определять внешней функцией (так как есть конструктор копирования и метод конкатенции). Кстати запись text.extractValue("name", &var); по длине равна: extractValue(text, "Name", &var); Зато вторая не перегружает интерфейс класса лишним. Что тебе еще надо? toInt, toDouble? Ну если тебе кажется boost::lexical_cast слижком громоздким, то напиши для него соответствующие враперы:
|
| Автор: andrew_121 16.6.2008, 20:38 | ||
| bsa - Спасибо. Решено - boost respect ! Alek86
Кто нибудь знает что это за тулза такая? |
| Автор: Lazin 16.6.2008, 20:51 | ||
которую лучше не использовать.. если не хотите гемороя с обновлением этой библиотеки |
| Автор: bsa 16.6.2008, 20:54 |
| andrew_121, зачем тебе эта утилита? Пишешь в документации к проекту, что для его сборки нужен boost, версии не ниже такой-то. И все. Остальное на совести тех, кто будет собирать. |
| Автор: andrew_121 16.6.2008, 20:58 |
| Всем приогромнейшее Спасибо. Тема закрыта. |
| Автор: Alek86 17.6.2008, 10:12 | ||
| опоздал, но все же http://www.boost.org/doc/libs/1_35_0/tools/bcp/bcp.html
нуну и часто ты буст обновляешь? |
| Автор: Lazin 17.6.2008, 10:33 | ||
когда выходят новые версии, а теперь представь, что мне еще что-нибудь захотелось из буста использовать, мне еще вырезать кусочек))
в общем это очень не для всех... |
| Автор: Alek86 17.6.2008, 10:45 | ||
я про это и говорил - человек не хочет весь буст с собой таскать а зачем его обновлять, если, допустим, операции для строк не поменялись? или поменялись, но тебе те изменения побоку твое же и так работает ну ты прям щас как автор темы насчет класса строк говоришь чтобы таксать с собой этакую God Library, в которой есть все для того, чтобы "если что" не нужно было добавлять лишние файлы |
| Автор: Lazin 17.6.2008, 11:43 | ||
архив трудно распаковать? странные вы люди, значит буст с собой таскать как библиотеку - зло, а отрезать от него кусок и сделать частью своего проекта - гут
знаешь, класс и набор библиотек - немного разные вещи)) |
| Автор: vinter 17.6.2008, 13:27 |
| Lazin, дело говорит, мало ли потом придется использовать некую вещь из буста, которая будет дергать функционал который ты выдрал, а этот функционал поменял немного свое поведение и теперь они не совместимы.. Вообщем не вижу никаких проблем в таскании буста за собой. |
| Автор: andrew_121 17.6.2008, 18:17 | ||
Обсолютно согласен. Осознал. Нет смысла. |