- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
void PrintAllChars()
{
for (int i = 0; i < 255; i++)
{
if (i == 10 || i == 20 || i == 30 || i == 40...i == 250)
{
}
else
{
Console.WriteLine((char)i);
}
}
}
+ void PrintAllCharsExceptForEachTenthChar()
сунул хуй в английский чай
все внезапно стало новым
хуй - английским. чай - хуёвым
Просвещайся с Кегданом ;)
Не позорь меня перед толпой
Ну и императивненько через списковую манду монаду:http://ideone.com/Wu7Y6e
http://ideone.com/wsRd9E
ну вот в этой фразе надо было сорок второй пропустить
> Руку в трусишки ей запустить.
Ну да, помощь с лабой - отличный предлог для распускания рук.
- Если только за менет
- Ну а если без него?
- То не выйдет ничего
- Может что нибудь в замен?
- Отсоси - и нет проблем
- Завтра у меня зачет!
- Меня это не ебет
- Препод наш все время злой...
- Так попробуй сдать пиздой
- Любе ты помог, зараза!
- Люба отсосала сразу
- Хочешь пивом заплачу?
- Нет, спасибо, не хочу
- Я же знаю. ты добряк...
- Без минет, Лен, никак.
- Как скажу об этом мужу?
- От него минет не нужен
- Что то больно борзым стал
- Ну так я один лишь сдал
- Я не буду делать это!
- Выбора, Ленуся, нету
- Хрен с тобой, снимай штаны...
- Перед богом все равны
надеюсь хоть на с# ты лучше пишешь
Пусть дальше пишет :D
Кстати, а почему i<255 - а как же 255й?
Их больше. И в один чар они уже не помещаются.
В руби с этим связана забавная херня - есть 2 разные функции которые по разному считают длину строки. Одна посимвольно, другая - "почарово"
Я на такую нарвался в MySQL. http://gvforum.ru/viewtopic.php?pid=1839#p1839:
P.S. Про Войну и мир Борманда наврал. Труъ ВиМ на 3.0МБ в комментариях он не написал, но объём первой редакции в 1.8МБ явно превысил.
Рассматривал результаты работы скрипта и увидел число там поменьше. А всё потому, что JS-овское String.prototype.length с UTF-8 работает правильно, а SQL-евское length - честно.
Ха! Свыше 27 тысяч комментариев общим объёмом 4.3e6 байт. Не помню только, как я пробелы считал.
6168 пользователей на ГК оставили говнокод/комментарий.
Зачем?
Всё попробовать не получится. save-load не завезли.
https://pp.vk.me/c617818/v617818200/23676/096sMD6kRzw.jpg
Гэндовна? :)
Отчего же? Просто не ныряет в неё с обрыва...
- байты (для хранения и ввода\вывода)
- символы юникода (не совсем понятно как считать из-за суррогатов, всякого диакритического обвеса, который комбинируется с предыдущим символом, RTL/LTR меток, из-за этого такая длина почти бесполезна)
- знакоместа (для высирания в консоль, например японские иероглифы - 2 знакоместа)
- пиксели (для рисования)
Вроде ниче не забыл?
Нормализация же.
В которую сторону? Емнип, там было несколько нормальных форм.
З.Ы. Ну не вижу я смысла считать эти символы. Вот байты/знакоместа/пиксели имеют смысл. А символы - нет.
Дано: строка в UTF-8. Надо: Перевести строку в UTF-32.
Сколько памяти выделить под результат?
А что тут думать?
1. Суррогаты существуют только в UTF-16 (ну и в основанных на ней кодировках). Суррогат — это всего лишь представление одного символа в виде пары 16-битных значений.
Просто UTF-16 настолько глубоко проникла в Windows, что некоторые стали считать 16-битный элемент UTF-16 символом, хотя это неправильно.
Итак, о суррогатах думать не нужно. Один суррогат в UTF-16 — это четыре байта или один символ. Точка.
2. Диакритический обвес — да, проблема, если мы путаем символы и знакоместа. Если разделить знакоместа и символы, то всё встаёт на места: буква + N диакритических знаков = 1 знакоместо или (1+N) символов.
Итак, каждый знак ударения, умляут, подчёркивание и т. п. будем считать отдельным символом, но не считать при подсчёте знакомест.
3. RTL/LTR-метки — будем считать чем-то вроде HTML-тегов. Мы же не задаёмся вопросом, сколько символов в коде «<p>текст, <b>жирный текст</b>, <u>подчёркнутый текст</u></p>». RTL-метка — такой же символ, как символ, входящий в HTML-тег. Для исходного кода страницы они будут символами, а в подсчёт знакомест не войдут.
Ну тогда получается, что в строках "ё" и "е¨" разное количество символов?
З.Ы. Ну ок, code point'ов.
Если тебе нужны именно символы естественного языка, то проводи нормализацию (или денормализацию, если хочешь отдельно поработать с диакритикой) и считай количество символов после этой операции.
А сложная функция, которая производит нормализацию «в уме», не нужна.
На мой взгляд если хочешь, чтобы 1234 было равно "1234", либо делай явно strval, либо делай явно intval, а оператор сравнения портить нецелесообразно™.
== сравнить
=== сравнить глубоко
=0= сравнить как числа (с кастами)
=()= сравнить как кортежи (с кастами)
=@= сравнить как строки (с кастами)
Версию со скобками можно кобенировать с версиями для типов:
=(0,@,(),(=))= - сравнить как кортежи из числа, строки и двух кортежей фиг знает с чем, причём второй кортеж сравнить глубоко.
Развивая тему,
=[+]= сравнение сумм элементов коллекции
=[@+]= сравнение сшитых строк из коллекции
=[sqrt.+.\x->x*x]= сравнение норм векторов
Jinn?!
=O= сравнение строк (вместо нелогичного =@=)
utf-8 это альтернативное представление для utf16 (поправьте если что)
> А у utf8 переход к индексу за O(min( len(str), index*6 ))
UTF-8 предназначен для хранения, передачи и вывода текста, там достаточно последовательной итерации. Если нужно текст обрабатывать (посложнее чем контакенация / нормализация / денормализация) — конвертируй в утф32 и вперёд.
А в UTF-16 есть ещё суррогаты: символы, коды которых не помещаются в 16 байт, представляются парой двухбайтовых суррогатов. Так что в UTF-16 кодпоинту может соответствовать 2 байта, а могут 4.
Новомодные смайлики, например, в 16 бит не помещаются.
А в UCS-4 и в UTF-32 всё просто: четыре байта на символ.
*****
К счастью, сдохла UTF-7, которую распарсить было труднее, чем UTF-8. К несчастью, жива Punycode, но к счастью, её применение ограничивается доменными именами.
UCS-4 == UTF-32 — тупо 4 байта отведённые на code-point
UCS-2 существовала, когда считали, что 2 байт хватит на все символы. Когда оказалось, что не хватит, поставили костыль, называющийся UTF-16: добавили суррогаты для не влазящих символов, добавив лишней головной боли.
Напишу ещё немного про СУБД.
Оказалось, что в MySQL кодировка, названная utf8, — это не совсем UTF-8, а некая кодировка, вмещающая символы, которые в UTF-8 занимают не более трёх байтов, что совпадает с диапазоном UCS-2.
Кодировку же, вмещающую символы, занимающие в UTF-8 до 4 байт включительно (коды до 1FFFFF), в MySQL назвали utf8mb4, чтобы было нескучно. Эта кодировка вмещает все символы из диапазона UTF-16.
Как думаете, если понадобится полный диапазон UTF-32, то utf8mb6 введут?
UCS-2 и UTF-16 совпадают, если код символа не превосходит 0xffff = 65535, т. е. помещается в 16 бит. Однако, в UCS-2 размер представления кодпоинта/символа фиксирован и всегда равен 2 байтам, поэтому она недостаточно разработана, чтобы вместить остальные коды.
А UTF-16 может вместить весь диапазон UTF-32, но некоторые кодпоинты представляются не двумя байтами, а четырьмя. Т. е. с поиском n-го символа и с определением длины строки те же проблемы, что и у UTF-8, хотя тут вариантов меньше. Об этом некоторые забывают, считая UTF-16 двухбайтовой кодировкой.
Есть ещё редкая кодировка CESU-8. Она использует алгоритм UTF-8, только в UTF-8 на вход подаётся UCS-4/UTF-32, а в CESU-8 на вход подаётся UTF-16. Т. е. в общем случае распутать CESU-8 ещё сложнее, чем UTF-8.
Вроде всё, других UCS нет. А, да, в UTF-32 и в UTF-16 порядок следования байтиков может быть разным (большой индеец/маленький индеец).
Про ARM:
The Current Program Status Register (CPSR) has the following 32 bits.
M (bits 0–4) is the processor mode bits.
T (bit 5) is the Thumb state bit.
F (bit 6) is the FIQ disable bit.
I (bit 7) is the IRQ disable bit.
A (bit 8) is the imprecise data abort disable bit.
E (bit 9) is the data endianness bit.
IT (bits 10–15 and 25–26) is the if-then state bits.
GE (bits 16–19) is the greater-than-or-equal-to bits.
DNM (bits 20–23) is the do not modify bits.
J (bit 24) is the Java state bit.
Q (bit 27) is the sticky overflow bit.
V (bit 28) is the overflow bit.
C (bit 29) is the carry/borrow/extend bit.
Z (bit 30) is the zero bit.
N (bit 31) is the negative/less than bit.