#include <cstring>
#include <cstdio>
bool CheckExtention( const char* filename, const char* ext )
{
if ( filename && ext )
{
return 0 == std::strcmp(std::strrchr(filename, '.'), ext);
}
return false;
}
int main()
{
const char* ext1 = ".png";
const char* ext2 = ".jpg";
const char* filename = "filename.png";
std::printf("%s\n", CheckExtention(filename, ext1) ? "true" : "false");
std::printf("%s\n", CheckExtention(filename, ext2) ? "true" : "false");
return 0;
}
実行結果
true!
false!
おおよそこんな感じか。strcmpでは大文字小文字を区別してしまうので良くないんだけど、C言語標準にはstricmpがないので適当に自作しなければならない。strlenしてtolowerしながら比較すればいいのかな?
WINAPIならPathFindExtensionってのがあるのでそれとlstrmpiあたり。
tchar.hをつかうならば_tcsrchrと_tcsicmpあたりか。
拡張子チェックするだけなのに意外に手間取った。文字列操作はちょっとした鬼門だ。
int stricmp( const char* s1, const char* s2 )
{
while ( (*s1) && std::tolower(*s1) == std::tolower(*s2) )
{
s1++;
s2++;
}
return std::tolower(*s1) - std::tolower(*s2);
}
stricmpを調べてみたら大体このようなことをするらしい。
0 件のコメント:
コメントを投稿