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 исправив тем самым косяк с утечкой памяти, убрал посколько ф-я была переписана. |