Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Функция IsIntNInt()

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)​
Возвращаемые значения:
  • 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;
}
Автор данной функции я, fBiMoA.
 
Последнее редактирование:
Сверху Снизу