PDA

Просмотр полной версии : [Function] Расстановка заглавных букв в строке



Prolific
11.05.2016, 21:12
Всем привет. Спустя очень много времени разобрался с побитовыми операторами (можете меня поздравить :yahoo:) и подумал что бы сделать. У Шилдта подсмотрел идейку и написал функцию.
Суть в том что заглавные и прописные буквы отличаются лишь одним битом (6-ым), соответственно его можно обнулять и наоборот тем самым изменять символ.
В данной функции заглавные буквы пишутся после точки и в начале строки.


stock CorrectString(string[])
{
new i, next_caps = 1;
do
{
switch(string[i])
{
case '.':
{
next_caps = 1;
continue;
}
case 'A'..'Z', 'a'..'z', 'А'..'Я', 'а'..'я':
{
if(next_caps)
{
string[i] &= 0b11011111;
next_caps = 0;
}
else string[i] |= 0b100000;
continue;
}
}

}while(string[i++] != '\0');
}

Daniel_Cortez
11.05.2016, 22:08
На самом деле добавление/вычитание из кода символа ничем не хуже, чем побитовое сложение/умножение. По крайней мере, в ассемблере под x86 эти операции настолько простые, что все они занимают лишь 1 процессорный такт. В абстрактной машине AMX вряд ли что-то сильно отличается в плане производительности (в версии интерпретатора для GCC точно, в ANSI C версии производительность во многом зависит от используемого компилятора, т.к. там нельзя сделать таблицу переходов).

Prolific
11.05.2016, 22:36
На самом деле добавление/вычитание из кода символа ничем не хуже, чем побитовое сложение/умножение. По крайней мере, в ассемблере под x86 эти операции настолько простые, что все они занимают лишь 1 процессорный такт. В абстрактной машине AMX вряд ли что-то сильно отличается в плане производительности (в версии интерпретатора для GCC точно, в ANSI C версии производительность во многом зависит от используемого компилятора, т.к. там нельзя сделать таблицу переходов).

Зато понты))