Юрий, «строка со счётчиком» — это, по сути, твоя struct stringy: буфер для хранения строки и счётчик символов в буфере. Поскольку используется счётчик, то нет необходимости использовать маркер конца строки (как в С символ '\0'), следовательно в такой строке каждый символ может иметь произвольное значение. Такая структура для хранения строк использовалась ещё в Turbo Pascal от Borland и, по слухам, до сих пор используется в MS Visual Basic. В Паскале переменные типа string были представлены в памяти как байт счётчика символов за которым следовали байты с символами строки. Следовательно, длина строки ограничивалась 255 символами, а максимальный объём памяти, занимаемый переменной типа string, — 256 байт (Юникод тогда ещё не придумали).
И если есть время посмотри мой первый класс :)
Я скачал одну из первых версий, поправил ошибки, откомпилировал. По диагонали просмотрел код. Собираюсь с духом (и временем) для обстоятельного ответа. Если получится, отвечу в соотв. ветке форума.
porshe, я бы воздержался от использования строковых функций из <cstring>, поскольку эти функции подразумевают (1) наличие концевого нуля и (2) отсутствие нулевого символа в не в конце строки.
я бы воздержался от использования строковых функций из <cstring>, поскольку эти функции подразумевают (1) наличие концевого нуля и (2) отсутствие нулевого символа в не в конце строки.
Но ведь есть функции, где можно указать количество обрабатываемых символов. Например strncpy, или memcpy. Вообще избегать функций из <cstdlib>?
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Юрий, «строка со счётчиком» — это, по сути, твоя
struct stringy
: буфер для хранения строки и счётчик символов в буфере. Поскольку используется счётчик, то нет необходимости использовать маркер конца строки (как в С символ '\0'), следовательно в такой строке каждый символ может иметь произвольное значение. Такая структура для хранения строк использовалась ещё в Turbo Pascal от Borland и, по слухам, до сих пор используется в MS Visual Basic. В Паскале переменные типаstring
были представлены в памяти как байт счётчика символов за которым следовали байты с символами строки. Следовательно, длина строки ограничивалась 255 символами, а максимальный объём памяти, занимаемый переменной типаstring
, — 256 байт (Юникод тогда ещё не придумали).Я скачал одну из первых версий, поправил ошибки, откомпилировал. По диагонали просмотрел код. Собираюсь с духом (и временем) для обстоятельного ответа. Если получится, отвечу в соотв. ветке форума.
Cranium, использовать
C
-функции работы со строками можно?( типаstrcmp
,strcpy
)зачем? Реализуйте своё ;) можно шаблонное
Croessmah, напрасно иронизируешь.
porshe, я бы воздержался от использования строковых функций из
<cstring>
, поскольку эти функции подразумевают (1) наличие концевого нуля и (2) отсутствие нулевого символа в не в конце строки.где тут ирония?
Смайлик навёл на мысль.
просто я смайлики люблю :)
Но ведь есть функции, где можно указать количество обрабатываемых символов. Например
strncpy
, илиmemcpy
. Вообще избегать функций из<cstdlib>
?porshe, читаем задание