Я предлагаю написать это так, как если бы вам было разрешено использовать библиотечные функции.Затем вернитесь и напишите свои собственные версии тех библиотечных функций, которые вы использовали.Хотя написание высокооптимизированных версий функций string.h может быть затруднено, написание приличных версий большинства из них на языке C довольно просто.
Использование подпрограмм (функций) для предварительного выполнения подзадач этой проблемыпомочь вам сохранить ясность кода, а также избежать некоторых типов проблем, например, если вы позвонили:
x = stringExist("aaaaa", "aa");
В строке "aaaaa" есть 4 вхождения строки "aa", но я недумаю, что ваша функция найдет их всех.Причина этого заключается в том, что при поиске по вхождению большей строки для вхождений секунды вы используете один и тот же индекс как для начала строки, так и внутри строки.На самом деле, похоже, что вы получите неправильные результаты для:
x = stringExist("tBatBath", "tBath");
Если, конечно, я неправильно понял, что должна была делать функция.
Если бы вы написаливаша собственная версия функции сравнения строкового префикса (по сути memcmp
или strncmp
), тогда вы бы отделили задачу сопоставления длины строки от более глубокого взгляда на строку и, вероятно, не допустили бы такой ошибки.
Если вы беспокоитесь о снижении эффективности своих функций и накладных расходах на вызов функций, не делайте этого.Во-первых, это не так уж плохо.Во-вторых, просто объявите их inline
или static inline
, и если вы скомпилируете с включенной оптимизацией, компилятор, скорее всего, сгенерирует код так же хорошо, как и без использования нескольких функций.