PDA

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



vovandolg
19.01.2016, 00:02
Когда то давно наткнулся на такую темку в интернете где данная функция strsplit быстрее всяких strtock и других подобных..


stock strsplit(dest[], const string[], &index, seperator=' ')
{
if(index != 0 && string[index] != '\0')
{
index++;
}
new i = 0;
for (;;)
{
if (i == 0)
{
for (;;)
{
if (string[index] == seperator)
{
index++;
}
else
{
switch (string[index])
{
case '\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v': index++;
default: break;
}
}
}
}
if (string[index] == seperator)
{
break;
}
switch (string[index])
{
case '\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v': break;
default: dest[i++] = string[index++];
}
}
dest[i] = '\0';
}
Можно ли как то заюзать данный код для команд и действительно ли он будет работать быстрее других?

ziggi
19.01.2016, 00:11
Да, эта функция быстрее, чем strtok. Но всё-равно лучше использовать sscanf2.

vovandolg
19.01.2016, 00:21
Во сколько быстрее работает sscanf чем эта функция?

ziggi
19.01.2016, 00:46
Во сколько быстрее работает sscanf чем эта функция?

Не знаю, проверь.

MacMailler
19.01.2016, 01:45
Во сколько быстрее работает sscanf чем эта функция?

В шесть раз. Еще у sscanf'а функционала больше, чем у этой функции.

L0ndl3m
20.01.2016, 00:18
Использование sscanf2 действительно оправдано, если вы используете большое множество аргументов ( правда, не всегда ).

Как-то давно выкладывал собственную реализацию функции Split ( далее переименовал в SplitString (http://pro-pawn.ru/showthread.php?5603) ).

Реализация не идеальна, но, как я отметил в своей статье, она действительно, выполняется в несколько раз быстрее, чем стандартный split.