|
|
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
Здраствуйте мастера С++!!! Я недавно начал углубленно изучать С++, набрался книг, статей, исходников и всего такого. С самим синтаксисом С я немного знаком и простенькие вещи писал уже давно. Вот по ходу учебы возникла такая вот проблема, помогите если не сложно. В MFC есть такой тип данных как CString, я во первых не знаю как с ним работать толком, например у меня возникла такая проблема, у меня переменная объявлена как CString, а в функцию нужно передать как параметр как раз эту переменную, но в фунции этот параметр объявлен как "unsigned char *", как преобразовать я незнаю, что мне делать в данной ситуации??? Еще я столкнулся с таким типом как std::string что это за рыба, чем он отличается от CString, где о них можно почитать кроме MSDN. Это был первый вопрос, а вот теперь поинтересней вопрос(покрайне мере для меня). Я пишу маленькую библиотеку(пока маленькую :), но она должна использоваться в разных операционных системах, и мне опять нужен тип string, но CString уже не подходит, как и std::string. Покажите мна маленький примерчик или укажите где поискать, как мне написать маленький класс-тип каторый я мог бы использовать как символьную переменную и например как в этом классе-типе создать функцию которая покажет количество символов в переменной, а дальше я уже думаю смогу напихать этот класс-тип разными функциями??? Заранее спасибо за попытки помочь!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 01:42 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
написание хорошего класса для строк - нетривиальная задача, поэтому не лучше ли сначала ознакомиться с тем, что уже есть. В частности, std::string - это класс из STL. Сл., надо смотреть в док. по STL (есть и книги). В учебнике по С++ тоже может быть кратко описан. STL не относится специально к VC, а доступно для разных трансляторов и разных операционных систем. Например, можно использовать с BCB в Windows или с GCC в Linux. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 02:15 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
У Страуструпа "Язык программирования C++" есть пример простейшеного my_string, у Мейерса разжованы различные подходы к реализации string в "Эффективном использовании STL". ps: а чем Вам std::string не кроссплатформенное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 10:07 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
CString( const unsigned char* psz ); //------------------------------------ CString s( "abcd" ); LPTSTR p = s.GetBuffer( s.GetLength() ); s.ReleaseBuffer( ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 11:58 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
Я бы еще обратил внимание на flex_string Александреску, так же его враппер строки представленной через вектор. Во флексе, есть "подстраивание" под размер строки. Так же там используется фокус под наименованием "перемещающий конструктор". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 12:22 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
dwlЯ бы еще обратил внимание на flex_string Александреску, так же его враппер строки представленной через вектор. Во флексе, есть "подстраивание" под размер строки. Так же там используется фокус под наименованием "перемещающий конструктор". Советовать Александреску новичку - крафне разумное решение :) Его и опытному то советовать неразумно... Автору: Чем не устраивает std::string ? Кроссплатформенный, стандартный ... Давайте конкретику - может сможем подсказать как его граммотно использовать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 12:56 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
std :: string - самый кросплатформенный вариант, т.к. STL - часть стандарта C++. Лично я свой класс строки делал как надстройку над std :: string, реализующие методы типа AnsiStringовских (т.е. в нём есть private: std :: string m_Data). Ничего пока, вроде работает. Если речь идёт не об офисных программах, а об утилитах (где не нужны наворочанные форматные преобразования), то имхо лучше всего брать std::string - как самую стандартную. Если напишешь свой класс (через new[] или malloc) - проверь в цикле его быстродействие и std::string... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 22:38 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
Быстродействие операций std::string не стандартизовано, как и не стандартизована реализация, т.е. хранение строки. Помнится раньше встречались "кусочные" реализации std::string. В то время, как быстродействие многих алгоритмов обработки контейнеров STL стандартизовано. Я имею ввиду быстройдествие выраженное через "О БОЛЬШОЕ". Это такое небольшое примечание, когда речь заходит о переносимости. Так что, если писать "тренировочный" класс String, то наверное для упрощения себе же жизни, проще взят за основу vector<char> и "скопировать" нужную часть интерфейса std::string, реализовав ее посредством стандартных алгоритмов. Именно так сделано у Александреску во враппере vector<char> ничего сложного в этом классе нету. Отталкиваясь от vector<char> "тренирующийся" может не сильно вдаваться в тонкости работы с динамической памятью и безопасностью реализации оператора =. Заодно ознакомится с интерфейсом вектора и стандартными алгоритмами. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 16:40 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
dwlБыстродействие операций std::string не стандартизовано, как и не стандартизована реализация, т.е. хранение строки. Имею в виду реализацию STLPort (stlport.org). Портирована практически на всё, насколько мне известно. dwlпроще взять за основу vector<char> и "скопировать" нужную часть интерфейса std::string, реализовав ее посредством стандартных алгоритмов. Проще? При уже готовой std::string? Хотя если для тренировки - почему бы и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 21:53 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за просвящение меня неопытного :) Вот я обьявил переменную типа std:string, теперь мне опять нужно привести ее к типу unsigned char*, опять таки как? И еще а как мне создать свой тип который бы имел все свойства std:string, тоесть был его наследником и дописать в уже созданый мой тип функцию преобразования его в unsigned char??? И вообще кто-то может поделится ссылками где можно почитать такого рода информацию, интересуют любые преобразования с одного типа в другой! Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 22:22 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
unsigned char*, если std::string s; то s.c_str () даёт доступ к содержащейся внутри строке символов с стиле С, напр., можно писать printf ("%s", s.c_str ()); К unsigned char преобразуй как обычно. Для UNICODE строк есть std::wstring ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 10:43 |
|
||
|
Тип string, несколько вопросов! Помогите написать свой класс-тип MyString
|
|||
|---|---|---|---|
|
#18+
для получения массива символов ты можешь захотеть воспользоваться .data()(для многих STL он будет ASCIZ, а для некоторых нет). Хочу предостеречь, т.к. реализация строки не стандартизована, то лучше не пользоваться решениями ориентированными на непрерывный массив. Пример, если считать что строка есть непрерывный участок памяти, то аналоги c_str могут быть таким (в зависимости от реализаций) str.data(), &str[0], &*str.begin(). Последние два метода "скопированы" из std::vector, но если там они правомочны, то для строки подобное обращение может быть чреватым. Это так, к слову... Подробнее в С.Майерс "Эффективное использование STL" Насчет преобразований лучше почитать книжку "дедушки Бьёрна". Следует иметь ввиду, что есть старые Си преобразования, новые static_cast & etc, и оператор приведения к типу. Чтобы понять неявные преобразования лучше разобраться с конструкторами и деструкторами, "появлением" временных объектов, и некоторые другие тонкости(модификаторы доступа const). Об этом лучше прочесть в Г.Саттер "Exceptional C++" не помню как на русском перевели, кажется "решение сложных задач на С++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 11:45 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2033631]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 330ms |

| 0 / 0 |
