PDA

Просмотр полной версии : [Вопрос] Чекер введённого текста



_lizard
11.12.2016, 21:26
Пытаюсь сделать справочник значения команд, но вот проблема. Если допустим ввести "/mn" - всё в порядке, а если "/mn " (с пробелом), то уже пишет, что неизвестная команда, не могу придумать как решить данную проблемку.


new command_text[][][] = {
{"/help ", "Помощь по игре"},
{"/mn ", "Меню игрока"},
{"/menu ", "Меню игрока"}
};
new cmd_help_str[128];
for(new i = 0; i < sizeof(command_text); i++)
{
if(!strcmp(command_text[i][0], inputtext, true))
{
format(cmd_help_str, sizeof(cmd_help_str), "%s {FFFFFF}- %s", inputtext, command_text[i][1]);
SCM(playerid, COLOR_LIGHT_GREEN, cmd_help_str);
return 1;
}
}

Saibot
11.12.2016, 21:39
Можно попробовать вместо функции strcmp, использовать функцию strfind (https://wiki.sa-mp.com/wiki/Strfind)

BadPawn
11.12.2016, 23:39
main()
{
new command_text[][][] = {
{"/help ", "Помощь по игре"},
{"/mn ", "Меню игрока"},
{"/menu ", "Меню игрока1"}
};
new cmd_help_str[128];
for(new i = 0; i < sizeof(command_text); i++)
{
if(strfind(command_text[i][0], "/mn ", true) != -1)
{
format(cmd_help_str, sizeof(cmd_help_str), "mn {FFFFFF}- %s", command_text[i][1]);
print(cmd_help_str);
}
}
}

strfind подходящая функция.

DeimoS
12.12.2016, 02:22
Только вот strgind не позволит отлавливать 2 разных команды с одинаковым написанием, типа

/b
/buy
Гораздо лучше просто воспользоваться такой функцией

RemoveSpaces_DC(string[])
{
static pos, pos2, c;
for (pos = 0, pos2 = 0;; ++pos)
{
switch (c = string[pos])
{
case ' ': continue;
case '\0':
{
string[pos2] = '\0';
return;
}
}
string[pos2++] = c;
}
}
То бишь, в случае, если strcmp не нашёл какую-либо команду, уже начинаешь обрабатывать эту команду с помощью функции для удаления пробелов и потом повторяешь поиск ещё раз