Если вы можете изменить сигнатуру своей функции, попробуйте изменить ее на
int EndsWith(char const * str, char const * suffix, int lenstr, int lensuf);
Это приведет к более безопасному, более многократно используемому и более эффективному коду:
- Добавленные квалификаторы const гарантируют, что вы не ошибочно измените входные строки. Эта функция является предикатом, поэтому я предполагаю, что она никогда не будет иметь побочных эффектов.
- Суффикс для сравнения передается в качестве параметра, поэтому вы можете сохранить эту функцию для последующего повторного использования с другими суффиксами.
- Эта подпись даст вам возможность передать длины строк, если вы их уже знаете. Мы называем это динамическое программирование .
Мы можем определить функцию следующим образом:
int EndsWith(char const * str, char const * suffix, int lenstr, int lensuf)
{
if( ! str && ! suffix ) return 1;
if( ! str || ! suffix ) return 0;
if( lenstr < 0 ) lenstr = strlen(str);
if( lensuf < 0 ) lensuf = strlen(suffix);
return strcmp(str + lenstr - lensuf, suffix) == 0;
}
Очевидным контраргументом для дополнительных параметров является то, что они подразумевают больше шума в коде или менее выразительный код.