Если поиск символа встречается довольно редко, ваш подход разумен Как правило, подпрограммы библиотеки C, такие как strchr
, написаны на жестком машинном языке и будут работать быстрее, чем практически любой цикл, который вы кодируете на C. Некоторые модели оборудования имеют машинные инструкции для поиска в блоках памяти; подпрограмма библиотеки C, которая будет работать намного быстрее, чем любой цикл, который вы можете написать в C.
Чтобы немного усилить свой подход, как на счет этого:
#define isEven(a) ((a) & 1) == 0)
char* p = strchr( s, c );
while (p != NULL) { /* loop through all the c's */
char* q = p; /* scan backwards through preceding escapes */
while (q > s && *(q-1) == '\\')
--q;
if (isEven( p - q )) /* even number of esc's => c is good */
return p;
p = strchr( p+1, c ); /* else odd escapes => c is escaped, keep going */
}
return null;