В моей программе C было много вызовов функций strstr. Стандартная библиотека strstr уже быстрая, но в моем случае строка поиска всегда имеет длину 5 символов. Я заменил его специальной версией, чтобы получить некоторую скорость:
int strstr5(const char *cs, const char *ct) { while (cs[4]) { if (cs[0] == ct[0] && cs[1] == ct[1] && cs[2] == ct[2] && cs[3] == ct[3] && cs[4] == ct[4]) return 1; cs++; } return 0; }
Функция возвращает целое число, потому что достаточно знать, имеет ли ct cs. Моя функция проста и быстрее, чем стандартная strstr в этом специальном случае, но мне интересно узнать, есть ли у кого-нибудь улучшения производительности, которые могут быть применены. Даже небольшие улучшения приветствуются.
Резюме:
- cs имеет длину >= 10, но в остальном он может меняться. Длина известна ранее (не используется в моей функции). Длина cs обычно составляет от 100 до 200.
- ct имеет длину 5
- Содержимое строк может быть любым
Изменить: Спасибо за все ответы и комментарии. Я должен изучать и тестировать идеи, чтобы увидеть, что лучше всего работает. Я начну с идеи MAK о суффиксе trie.