C++ string常用截取字符串方法

C++ string常用截取字符串方法string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求:find(stringstrSub,npos);find_last_of(stringstrSub,npos);其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子字符串首次出现的位置,否则返回-1;注:(1)find_last_of的npos为从末尾开始寻找的位置。  …

大家好,又见面了,我是你们的朋友全栈君。

string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求:

find(string strSub, npos);

find_last_of(string strSub, npos);

其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子字符串首次出现的位置,否则返回-1;

注:(1)find_last_of的npos为从末尾开始寻找的位置。

       (2)下文中用到的strsub(npos,size)函数,其中npos为开始位置,size为截取大小

例1:直接查找字符串中是否具有某个字符串(返回”2″)

std::string strPath = "E:\\数据\18\00坐标系\\a.shp"
int a = 0;  
if (strPath.find("2018") == std::string::npos)
{
	a = 1;
}
else
{
	a = 2;
}
return a;

例2:查找某个字符串的字符串(返回“E:”)

std::string strPath = "E:\\数据\18\00坐标系\\a.shp"
int nPos = strPath.find("\\");
if(nPos != -1)
{
    strPath = strPath.substr(0, nPos);
}
return strPath;

例3:查找某个字符串中某两个子字符串之间的字符串(返回“2000坐标系”)

std::string strPath = "E:\\数据\18\00坐标系\\a.shp"
std::string::size_type nPos1 = std::string::npos;
std::string::size_type nPos2 = 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);
}
return strPath;

提高:递归获取路径名中的子目录

//获取路径名中的子目录:strPath为路径名,strSubPath为输出的子目录,
  nSearch为从尾向前检索的级别(默认为1级)

bool _GetSubPath(std::string& strPath,std::string& strSubPath, int nSearch)
{	
	if (-1 == nSearch || strPath.empty())
		return false;
	std::string::size_type nPos1 = std::string::npos;
	nPos1 = strPath.find_last_of("\\");
	if (nPos1 != -1)
	{
		strSubPath = strPath.substr(nPos1 + 1, strPath.length() - nPos1);
		int nNewSearch = nSearch > 1 ? nSearch - 1 : -1;
		_GetSubPath(strPath.substr(0, nPos1), strSubPath, nNewSearch);
	}
	return true;
}

int main()
{
    std::string strPath = "E:\\数据\18\00坐标系\\a.shp";
    std::string strSubPath = "";
    if(_GetSubPath(strPath, strSubPath, 1)
    {
        printf(“返回'a.shp'”);
    }
    if(_GetSubPath(strPath, strSubPath, 2)
    {
        printf(“返回'2000坐标系'”);
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144358.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Vmware安装Ubuntu16.4、Ubuntu里安装python3.9、Ubuntu安装PyCharm的过程及出现的问题的解决[通俗易懂]

    Vmware安装Ubuntu16.4、Ubuntu里安装python3.9、Ubuntu安装PyCharm的过程及出现的问题的解决[通俗易懂]目录1、VMware安装Ubuntu16.4虚拟机1.1、下载Ubuntu镜像文件1.2、安装Ubuntu虚拟机1.2、装Ubuntu系统和虚拟机工具1.3、解决Ubuntu不能全屏显示1.4、设置共享文件夹1.4.1、主机上的文件夹设置1.4.2、虚拟机上的设置1.5、解决/mnt下没有hgfs文件夹1.6、解决找不到共享文件夹的问题1.7、解决重启后共享文件夹没有了的问题2、Ubuntu安装Python3.92.1、安装Python3.92.

  • mysql8 2058_SQLyog连接MySQL8.0报2058错误的解决方案[通俗易懂]

    mysql8 2058_SQLyog连接MySQL8.0报2058错误的解决方案[通俗易懂]引言用SQLyog连接MySQL8.0(社区版:mysql-installer-community-8.0.15.0.msi),出现错误2058(Plugincaching_sha2_passwordcouldnotbeloaded:xxxx),通过查询资料了解了该错误的原因并在本文中提出了该问题的方案。原因该错误提示如下图所示:具体原因:新的MySQL8.0安装,在初始化数据目录时,…

  • rapidgator怎么下载_他来时有闪电百度云

    rapidgator怎么下载_他来时有闪电百度云在国内,文件的分享基本上市通过百度云盘来的,但很多小伙伴有时候会发现需要下载的文件是放在一些国外云盘上的,这些文件该怎么下载捏?其实国外的云盘种类非常多,不像国内的一家独大,常用的国外云盘比如Rapidgator,alfafile,uploadgig,filespace等等。但这些云盘都是有些类似的特点就是,如果不付费下载的需要验证码或者下载的超级慢!!!尤其在国内的网络环境下。不仅如此,…

  • Groupid(artifact id)

    什么是groupid和artifactId?groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。groupId和artifactId是maven管理项目包时用作区分的字段,就像是地图上的坐标。artifactId:artifactId一般是项目名或者模块名。group…

  • linux0.11_linux vim安装

    linux0.11_linux vim安装前言所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的

  • 面试又给我问到MySQL索引【索引的使用策略及优化】「建议收藏」

    面试又给我问到MySQL索引【索引的使用策略及优化】

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号