详解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常用截取字符串方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!