Мне интересно, было ли в некоторых ситуациях сравнение с меньшим количеством процессоров для сравнения строк, сравнивая символы напрямую, в отличие от использования strcmp.Использование strcmp для сравнения строк и сравнения символов напрямую
Для получения некоторой исходной информации, я кодирую на C во встроенной системе с небольшой вычислительной мощностью. Он должен читать входящую строку и выполнять определенные задачи в зависимости от того, что представляет собой входящая строка.
Говорите входящую строку: "BANANASingorethispartAPPLESignorethisalsoORANGES"
. Я хочу проверить, что BANANAS
, APPLES
и ORANGES
присутствуют в точном месте. Мой код будет сделать это:
input = "BANANASingorethispartAPPLESignorethisalsoORANGES";
char compare[100]; //array to hold input to be compared
strncopy(compare,input,7); //copy "BANANAS" to compare
compare[7] = "\0"; //terminate "BANANAS"
if (strcmp(compare, "BANANAS") == 0){
strncopy(compare,input[21],6); //copy "APPLES" to compare
compare[6] = "\0"; //terminate "APPLES"
if(strcmp(compare,"APPLES")==0){
//repeat for "ORANGES"
}
}
Или я мог бы сравнить символы непосредственно:
input = "BANANASingorethispartAPPLESignorethisalsoORANGES";
if(input[0]=='B' && input[1]=='A' && input[2]=='N' && input[3]=='A' && input[4]=='N' && input[5]=='A' && input[6]=='S'){
if(input[21]=='A' && input[22]=="P" <snipped>){
if(input[30]=='O' <snipped>){
//input string matches my condition!
}
}
}
Использование strncopy + зЬгстр более элегантно, но из соображений производительности, было бы быстрее, чтобы просто сравнить символы напрямую ?
Я считаю, что 'strcmp()' as 'strlen()' и т. Д. Optmized вам не беспокоиться об этом. –
Если стандартная библиотека предоставляет вам такие возможности, как сравнение строк, вы всегда должны их выбирать. –
Я считаю, что время, затрачиваемое на составление этого вопроса, гораздо важнее, чем выигрыш в производительности, который вы могли бы получить от принятия лучших из этих двух вариантов. –