Для выполнения сортировки файлов в моем коде я использовал strncmp
для сравнения первых элементов каждой строки.strncmp в двух операторах занимает больше времени, чем в одном выражении
В том числе мой код здесь:
Код 1:
for (i = 1; i < file_cnt;)
{
if ((strncmp(info[i-1].name, "1", 1) == 0) &&
(strncmp(info[i].name, "2", 1) == 0))
{
to do....
i += 2;
}
else if ((strncmp(info[i-1].name, "2", 1) == 0) &&
(strncmp(info[i].name, "1", 1) == 0))
{
to do....
i += 2;
}
...
}
Код 2:
for (i = 1; i < file_cnt;)
{
if (strncmp(info[i-1].name, "1", 1) == 0)
{
if (strncmp(info[i].name, "2", 1) == 0)
{
to do....
i += 2;
}
}
else if (strncmp(info[i-1].name, "2", 1) == 0)
{
if (strncmp(info[i].name, "1", 1) == 0)
{
to do....
i += 2;
}
}
...
}
Здесь Code 2
занимает сравнительно больше времени, чем Code 1
. Я работаю с кросс-платформенным устройством и запускаю Code 2
, что вызывает множество проблем с другими частями моего кода.
Почему это сравнение двух операторов занимает больше времени, чем сравнение одного оператора?
Какой компилятор вы используете? У вас есть оптимизация? Кроме того, зачем использовать 'strncmp()' для сравнения только одного символа? Вы можете просто сравнить 'char' напрямую. –
Возможно, вы можете сделать это даже «быстрее», если вы * не * используете 'strncmp'. Поскольку вы сравниваете только два символа (не забудьте о терминаторе строк), вы можете сделать e, g, 'if (info [i - 1] .name [0] == '2' && info [i - 1 ] .name [1] == '\ 0') ... ' –
Также обратите внимание, что два фрагмента кода являются * not * равнозначными. В первом фрагменте кода, если второй 'strncmp' в первом' if' является ложным, код переходит в 'else', который, если оба сравнения истинны, вы выполняете в нем код (например,' i + = 2'. Однако во втором фрагменте кода, если первый внешний 'if' является истинным, а первое вложенное условие' if' является ложным, вы *** не *** переходите к 'else'. –