18.02.2017, 08:26
при старте
А вообще лучше делать методом, который описал Bombo. Прибавлять 0x20
А вообще лучше делать методом, который описал Bombo. Прибавлять 0x20
char* UpperToLower(char* str)
{
int len = strlen(str);
char ch;
char* rezult = new char[len];
for (int i = 0; i <= len; i++)
{
ch = *str;
if ((ch>='A') && (ch<='Z')) ch += 32;
rezult[i] = ch;
str++;
}
return rezult;
}
void UpperToLower(char *str)
{
unsigned char *s = (unsigned char*)str;
size_t len = strlen(str);
for(size_t i = 0; i < len; i++)
{
if(s[i] > 64 && s[i] < 91) // буквы A-Z
s[i] += 32;
else if(s[i] > 191 && s[i] < 224) // буквы А-Я
s[i] += 32;
else if(s[i] == 168) // буква Ё
s[i] = 184;
}
}
native TP_ToLowerString(string[]);
native bool:TP_IsFindIpString(string[]);
native bool:TP_IsNumberString(string[]);
PAWN_ToLowerString(string[]);
bool:PAWN_IsFindIpString(string[]); // автор MX_Master
bool:PAWN_IsNumberString(string[]);
#include <a_samp>
#include <jit>
#include <tp>
#define TEXT "Юc№,Q)CxТФLrнПкХBjф[oiCЧм<bhшЗ,ыWR]ЁxчM}*Д8аCbР+bэjЭ1№D=оnнM!чepWo%GTKЧyR6VTЙSАщэЭSem юjFOЩ]ЭьтЛНЖ.ЧHLЛ"
main(){}
public OnGameModeInit()
{
new time = GetTickCount();
for (new i; i < 1000000; i++)
{
TP_ToLowerString(TEXT);
}
printf("PLUGIN: %d ms", GetTickCount() - time);
time = GetTickCount();
for (new i; i < 1000000; i++)
{
UpperToLower(TEXT);
}
printf("PAWN UpperToLower: %d ms", GetTickCount() - time);
time = GetTickCount();
for (new i; i < 1000000; i++)
{
StringToLowerByTable_ASCII(TEXT);
}
printf("PAWN StringToLowerByTable_ASCII: %d ms", GetTickCount() - time);
return 1;
}
new chars_lower_ascii[] = // en+ru
{
0x00010203,0x04050607,0x08090A0B,0x0C0D0E0F,0x10111213,0x14151617,0x18191A1B,0x1C1D1E1F,
0x20212223,0x24252627,0x28292A2B,0x2C2D2E2F,0x30313233,0x34353637,0x38393A3B,0x3C3D3E3F,
0x40616263,0x64656667,0x68696A6B,0x6C6D6E6F,0x70717273,0x74757677,0x78797A5B,0x5C5D5E5F,
0x60616263,0x64656667,0x68696A6B,0x6C6D6E6F,0x70717273,0x74757677,0x78797A7B,0x7C7D7E7F,
0x80818283,0x84858687,0x88898A8B,0x8C8D8E8F,0x90919293,0x94959697,0x98999A9B,0x9C9D9E9F,
0xA0A1A2A3,0xA4A5A6A7,0xB8A9AAAB,0xACADAEAF,0xB0B1B2B3,0xB4B5B6B7,0xB8B9BABB,0xBCBDBEBF,
0xE0E1E2E3,0xE4E5E6E7,0xE8E9EAEB,0xECEDEEEF,0xF0F1F2F3,0xF4F5F6F7,0xF8F9FAFB,0xFCFDFEFF,
0xE0E1E2E3,0xE4E5E6E7,0xE8E9EAEB,0xECEDEEEF,0xF0F1F2F3,0xF4F5F6F7,0xF8F9FAFB,0xFCFDFEFF
};
stock StringToLowerByTable_ASCII(string[]) {
new index = -1;
while(string[++index]) {
string[index] = chars_lower_ascii{string[index]};
}
}
UpperToLower(string[])
{
new len = strlen(string);
for (new i; i < len; i++)
{
switch (string[i])
{
case 'A': string[i] = 'a';
case 'B': string[i] = 'b';
case 'C': string[i] = 'c';
case 'D': string[i] = 'd';
case 'E': string[i] = 'e';
case 'F': string[i] = 'f';
case 'G': string[i] = 'g';
case 'H': string[i] = 'h';
case 'I': string[i] = 'i';
case 'J': string[i] = 'j';
case 'K': string[i] = 'k';
case 'L': string[i] = 'l';
case 'M': string[i] = 'm';
case 'N': string[i] = 'n';
case 'O': string[i] = 'o';
case 'P': string[i] = 'p';
case 'Q': string[i] = 'q';
case 'R': string[i] = 'r';
case 'S': string[i] = 's';
case 'T': string[i] = 't';
case 'U': string[i] = 'u';
case 'V': string[i] = 'v';
case 'W': string[i] = 'w';
case 'X': string[i] = 'x';
case 'Y': string[i] = 'y';
case 'Z': string[i] = 'z';
case 'А': string[i] = 'а';
case 'Б': string[i] = 'б';
case 'В': string[i] = 'в';
case 'Г': string[i] = 'г';
case 'Д': string[i] = 'д';
case 'Е': string[i] = 'е';
case 'Ё': string[i] = 'ё';
case 'Ж': string[i] = 'ж';
case 'З': string[i] = 'з';
case 'И': string[i] = 'и';
case 'Й': string[i] = 'й';
case 'К': string[i] = 'к';
case 'Л': string[i] = 'л';
case 'М': string[i] = 'м';
case 'Н': string[i] = 'н';
case 'О': string[i] = 'о';
case 'П': string[i] = 'п';
case 'Р': string[i] = 'р';
case 'С': string[i] = 'с';
case 'Т': string[i] = 'т';
case 'У': string[i] = 'у';
case 'Ф': string[i] = 'ф';
case 'Х': string[i] = 'х';
case 'Ц': string[i] = 'ц';
case 'Ч': string[i] = 'ч';
case 'Ш': string[i] = 'ш';
case 'Щ': string[i] = 'щ';
case 'Ъ': string[i] = 'ъ';
case 'Ы': string[i] = 'ы';
case 'Ь': string[i] = 'ь';
case 'Э': string[i] = 'э';
case 'Ю': string[i] = 'ю';
case 'Я': string[i] = 'я';
}
}
}
PLUGIN: 713 ms PAWN UpperToLower: 1560 ms PAWN StringToLowerByTable_ASCII: 478 ms






UpperToLower_orig результат: 1034 ms
UpperToLower_miaso результат: 882 ms
UpperToLower_dartfol результат: 971 ms
UpperToLower_Mutha_X результат: 1372 ms
PAWN_UTL_White_116 результат: 524 ms
PAWN_UTL_White_116_MACR результат: 735 ms
PAWN_ToLowerString результат: 1628 ms


|
UPD: Не заметил, что кто то добавил в мою ф-ю delete[]string исправив тем самым косяк с утечкой памяти, убрал посколько ф-я была переписана. |