John R. Shaw
Просто - просто определите длину строки, хранящейся в szFileName, и выполните поиск в обратном направлении до тех пор, пока вы не оштрафуете'.', а затем сравните это с расширением, которое вы ищете. Другими словами, используйте свой мозг, а не интернет, чтобы решить проблему.
Следующий Старый Стиль C-кода должен сделать трюк:
/* This code has not been compiled - but I would be surprised if is does not work as is. */
int HasExtension(const char* szFileName, const char* szExt)
{
if ('\0' != *szFileName) /* required to prevent out of range error. */
{
int i;
for( i = strlen(szFileName) - 1; i > 0; --i)
{
if ('.' == szFileName[i])
break;
}
}
return (0 == strcmp(szFileName + i, szExt));
}
Это не единственный способ сделать это в C, но он будет выполнять свою работу.
Посмотрите, сможете ли вы выполнить ту же задачу с помощью цикла while.
Проведите свое исследование. Современная стандартная библиотека C может иметь более новые функции, которые сделают это за вас. Хороший программист на языке Си должен иметь возможность написать стандартную библиотеку с нуля, не используя интернет.
Увидев ответ Шао, я решил добавить это улучшение. Обратите внимание, что это не имеет встроенной защиты от ошибок программиста.
int StringEndsWith(const char* szFileName, const char* szExt)
{
return (strcmp(&szFileName[strlen(szFileName) - strlen(szExt), szExt) == 0);
}