MB>>>> Компенсиpовано. GS>>> Hе совсем. Для разных задач могут оказаться удобными разные GS>>> представления! KF>> Эффективен смешанный вариант. GS> Зачем? В огромной массе случаев удобен один из простейших вариантов.
Один из простейших видов сортировки -- сортировка пузырьком...
Затем, что это позволяет не перевычислять длину, когда это не нужно а с другой стороны, позволяет обрабатывать строку частично, не вычисляя длину подстроки. Думаю, тут ещё должны быть какие-либо хитрости вокруг UTF-8 (для посимвольной, а не побайтовой обработки).
KF>> И не спорь. Чисто паскалевский требует хранить длину в отдельном KF>> регистре GS> В "нулевом" элементе символьного массива, хранящего строку. Занимает GS> ровно GS> столько же места, сколько сишный "нуль-терминатор".
Hет. Одно слово -- типично 4 байта.
KF>> и всё время её перевычислять, GS> А каждый раз парсить строку в поисках "нуль-терминатора" тебя не GS> напрягает?
Hетрудно догадаться, что в функции вроде strtoul оно автомагически парсится.
KF>> что жутко неудобно. GS> Перевычислить одно значение всё таки гораздо проще, чем постоянно искать, GS> где кончается хвост ;)
strtok("У попа была собака...", " \t") -- перевычисляй для каждого кусочка.
KF>> Чисто сишный имеет трудности с определением длины когда это KF>> действительно нужно. GS> Чисто сишный имеет преимущество в возможности создания строк произвольной GS> длины,
"Дельфийный" тоже имеет такое преимущество (см. выше, про байт и слово).
GS> вариант". С длиной, хранящейся отдельно от самой строки, ибо в "сишной GS> строке" GS> для этого параметра места нету...
Ещё раз: в языке C строк нет, есть байтовый вектор. Принять как аксиому.