首页 > 代码库 > [C/C++]_[判断文件名后缀是不是支持的格式最快的方案]
[C/C++]_[判断文件名后缀是不是支持的格式最快的方案]
场景:
1. 已知道某库只支持某几种图片格式,png,jpg,gif,bmp,tif,jpeg.现在再加载文件时要判断文件后缀名是不是以上支持的格式。
2. 一般情况下是逐个判断是不是在所支持的列表里,但这样的做法既需要循环有需要多次判断.
解决方案:
1. 通过构造特定的字符串结构通过find找出来. --- 如果有速度更快的麻烦告诉我一下,没参考过开源代码中的实现,估计应该有.
";jpg;png;bmp;jpeg;gif;"
main.cpp
#include <iostream> #include <algorithm> #include <string.h> #include <assert.h> std::string GetFilePosfix(const char* path) { char* pos = strrchr(path,'.'); if(pos) { std::string str(pos+1); //1.转换为小写 //http://blog.csdn.net/infoworld/article/details/29872869 std::transform(str.begin(),str.end(),str.begin(),::tolower); return str; } return std::string(); } bool IsSupportPos(const std::string& posfix,const std::string& support) { std::string str(";"); str.append(posfix).append(";"); if(support.find(str)!=std::string::npos) { return true; } return false; } int main(int argc, char const *argv[]) { const char* POSFIX = ";jpg;png;bmp;jpeg;gif;"; const char* path = "E:\\picture\\11.ggIf"; std::string posfix = GetFilePosfix(path); std::cout << posfix << std::endl; assert(!IsSupportPos(posfix,POSFIX)); path = "E:\\picture\\11.gIf"; posfix = GetFilePosfix(path); std::cout << posfix << std::endl; assert(IsSupportPos(posfix,POSFIX)); return 0; }
[C/C++]_[判断文件名后缀是不是支持的格式最快的方案]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。