详解C++ string常用截取字符串方法
string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求:
find(stringstrSub,npos);
find_last_of(stringstrSub,npos);
其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子字符串首次出现的位置,否则返回-1;
注:
(1)find_last_of的npos为从末尾开始寻找的位置。
(2)下文中用到的strsub(npos,size)函数,其中npos为开始位置,size为截取大小
例1:直接查找字符串中是否具有某个字符串(返回"2")
std::stringstrPath="E:\\数据\\2018\\2000坐标系\\a.shp" inta=0; if(strPath.find("2018")==std::string::npos) { a=1; } else { a=2; } returna;
例2:查找某个字符串的字符串(返回“E:”)
std::stringstrPath="E:\\数据\\2018\\2000坐标系\\a.shp" intnPos=strPath.find("\\"); if(nPos!=-1) { strPath=strPath.substr(0,nPos); } returnstrPath;
例3:查找某个字符串中某两个子字符串之间的字符串(返回“2000坐标系”)
std::stringstrPath="E:\\数据\\2018\\2000坐标系\\a.shp" std::string::size_typenPos1=std::string::npos; std::string::size_typenPos2=std::string::npos; nPos1=strPath.find_last_of("\\"); nPos2=strPath.find_last_of("\\",nPos1-1); if(nPos1!=-1&&npos2!=-1) { strPath=strPath.substr(nPos2+1,nPos1-nPos2-1); } returnstrPath;
提高:递归获取路径名中的子目录
//获取路径名中的子目录:strPath为路径名,strSubPath为输出的子目录, nSearch为从尾向前检索的级别(默认为1级) bool_GetSubPath(std::string&strPath,std::string&strSubPath,intnSearch) { if(-1==nSearch||strPath.empty()) returnfalse; std::string::size_typenPos1=std::string::npos; nPos1=strPath.find_last_of("\\"); if(nPos1!=-1) { strSubPath=strPath.substr(nPos1+1,strPath.length()-nPos1); intnNewSearch=nSearch>1?nSearch-1:-1; _GetSubPath(strPath.substr(0,nPos1),strSubPath,nNewSearch); } returntrue; } intmain() { std::stringstrPath="E:\\数据\\2018\\2000坐标系\\a.shp"; std::stringstrSubPath=""; if(_GetSubPath(strPath,strSubPath,1) { printf(“返回'a.shp'”); } if(_GetSubPath(strPath,strSubPath,2) { printf(“返回'2000坐标系'”); } }
以上所述是小编给大家介绍的C++string常用截取字符串方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!