C++にはsplit関数というものがないのでネット情報から拝借しました。他にも色々方法があります。
下記コードではsplit関数でファイル名の拡張子を取り出し、checkImage関数によりpngであれば1、jpgであれば2、それら以外は-1を返します。
C++11から採用のregex_search関数で大文字・小文字に関係なく検索しています。
C/C++は型変換が面倒ですね。C/C++を常用していれば慣れるのでしょうが、たまに使う程度だと都度調べることになるので疲れます。一覧表を用意したいところです。
#include "process_image.h"
#include <string>
#include <vector>
#include <regex>
// split関数
std::vector<std::string> split(std::string str, char del) {
int first = 0;
int last = str.find_first_of(del);
std::vector<std::string> result;
while (first < str.size()) {
std::string subStr(str, first, last - first);
result.push_back(subStr);
first = last + 1;
last = str.find_first_of(del, first);
if (last == std::string::npos) {
last = str.size();
}
}
return result;
}
int checkImage(const char* filename){
std::string filename_str = std::string(filename);
char del = '.';
std::vector<std::string> list = split(filename_str, del);
std::string extension = list.back();
std::regex png("png", std::regex_constants::icase);
std::regex jpg("jpg", std::regex_constants::icase);
std::smatch m;
if (std::regex_search(extension, m, png)){
return 1;
} else if (std::regex_search(extension, m, jpg)){
return 2;
} else {
return -1;
}
}
参考サイト