fBiMoA
Дебютант
PHP:
stock IsIntNInt(IntNInt_SI[], IntNInt_Int = 2147483647)
{
if(IntNInt_Int < 0) return false;
new IntNInt_IS[11], IntNInt_I[4] = {-1, -1, -1, 0};
format(IntNInt_IS, sizeof(IntNInt_IS), "%d", IntNInt_Int);
new IntNInt_ISL = strlen(IntNInt_IS);
for(new IntNInt_i = 0, IntNInt_SSL = strlen(IntNInt_SI); IntNInt_i < IntNInt_SSL; IntNInt_i ++)
{
if(IntNInt_SSL >= 50) return false;
switch(IntNInt_SI[IntNInt_i])
{
case '+', '-':
{
if(IntNInt_I[0] >= 0 || IntNInt_I[1] >= 0) break;
else if(IntNInt_I[2] == -1) IntNInt_I[2] = IntNInt_i;
else return false;
}
case '0':
{
if(IntNInt_I[0] == -1) IntNInt_I[0] = IntNInt_i;
if(IntNInt_I[1] >= 0 && IntNInt_i > IntNInt_I[1]) IntNInt_I[3] ++;
}
case '1'..'9':
{
if(IntNInt_I[1] == -1) IntNInt_I[1] = IntNInt_i, IntNInt_I[3] = 1;
else IntNInt_I[3] ++;
}
default :
{
if(IntNInt_I[0] >= 0 || IntNInt_I[1] >= 0) break;
else return false;
}
}
if(IntNInt_I[3] > IntNInt_ISL) return false;
}
if(IntNInt_I[0] < 0 && IntNInt_I[1] < 0) return false;
if(IntNInt_I[3] == IntNInt_ISL) for(new IntNInt_i = 0; IntNInt_i < IntNInt_ISL; IntNInt_i ++)
{
if(IntNInt_i == 0 && IntNInt_SI[IntNInt_I[1]] < IntNInt_IS[IntNInt_i]) return true;
else if(IntNInt_SI[IntNInt_I[1]+IntNInt_i] > IntNInt_IS[IntNInt_i]) return false;
}
return true;
}
Функция IsIntNInt() проверяет целое число в строке на то, чтобы оно не превышало число размером 4 байта или можно проверить свой диапазон числа, к примеру от -255 до 255. Функция нормально работает со строками типа: "-00036540+-++-044603720", функция strval с этой строкой вернёт значение -36540.
Параметры:(strint[], diapason = 2147483647)
strint[] – Строка содержащая число.
diapason – Диапазон (только беззнаковые/положительные целые числа), в котором должно находиться число из строкового параметра strint[]. (По умолчанию 2147483647, для 4 байтовых переменных в pawn)
Возвращаемые значения:strint[] – Строка содержащая число.
diapason – Диапазон (только беззнаковые/положительные целые числа), в котором должно находиться число из строкового параметра strint[]. (По умолчанию 2147483647, для 4 байтовых переменных в pawn)
- true(1): Если функция успешно выполнена и число в строке входит в диапазон.
- false(0): Если в диапазоне указано отрицательное число, если строка содержащая число >= 50 символам (strval на эти строки возвращает 0), если в параметре strint[] не найдено число или число вне диапазона (в соответствии с strval).
PHP:
stock strtok(const string[], &index)
{
new length = strlen(string);
while(index < length && string[index] <= ' ') index ++;
new offset = index, result[30];
while(index < length && string[index] > ' ' && index-offset < sizeof(result)-1)
{
result[index-offset] = string[index];
index ++;
}
result[index-offset] = EOS;
return result;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], tmp[128], idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/intnint", true) == 0)
{ // /intnint 3714824915 -> число 3714824915 не умещается в 4 байта (-580142381)
// /intnint 5100000000 -> число 5100000000 не умещается в 4 байта (805032704)
// /intnint 348575 -> число 348575 умещается в 4 байта (348575)
// /intnint 2100000000 -> число 2100000000 умещается в 4 байта (2100000000)
tmp = strtok(cmdtext, idx);
if(strlen(tmp) < 1) return SendClientMessage(playerid,-1,"Введите: /intnint [число]");
new string[128];
if(IsIntNInt(tmp)) format(string,sizeof(string),"{33FF33}число %s умещается в 4 байта (%d)",tmp,strval(tmp));
else format(string,sizeof(string),"{FF0000}число %s не умещается в 4 байта (%d)",tmp,strval(tmp));
SendClientMessage(playerid, -1, string);
return true;
}
else if(strcmp(cmd, "/intnintd", true) == 0)
{ // /intnintd 255 -371 -> число -371 не умещается в диапазон от -255 до 255 (-371)
// /intnintd 255 200 -> число 200 умещается в диапазон от -255 до 255 (200)
tmp = strtok(cmdtext, idx);
new diapason = strval(tmp);
tmp = strtok(cmdtext, idx);
if(strlen(tmp) < 1) return SendClientMessage(playerid,-1,"Введите: /intnintd [диапазон] [число]");
new string[128];
if(IsIntNInt(tmp,diapason)) format(string,sizeof(string),"{33FF33}число %s умещается в диапазон от -%d до %d (%d)",tmp,diapason,diapason,strval(tmp));
else format(string,sizeof(string),"{FF0000}число %s не умещается в диапазон от -%d до %d (%d)",tmp,diapason,diapason,strval(tmp));
SendClientMessage(playerid, -1, string);
return true;
}
return false;
}
Последнее редактирование:
