基于std::string的字符串处理
转自:http://zxdflyer.blog.163.com/blog/static/25664262201322510217495/
C++标准模板库std使用广泛。该库中处理字符串的对象为std::string,该对象常用来对字符串分割、替换、提取子字符串等操作。但是由于该库全部使用模板编程,而且函数形式也比较复杂,在使用时经常出现问题。为了便于重用,根据在实际使用时常用到的功能,我将相应的代码集成到了一个文件中,代码如下:
/*********************************************************************************************
* 文件:StringLib
* 功能:基于的std::string实现的常用字符串操作,字符串分割,替换等
* 作者:张晓东* 时间:2012-11-19
* 修改:2012-11-19完成初步版本,实现:字符串分割,字符串替换,提取文件路径,文件名字,文件扩展名*********************************************************************************************/ #ifndef _StringLib_h
#define _StringLib_h
#include <string>
using namespace std;
#ifdef _cplusplusextern "C"
{
#endif
//从字符串str中,使用pattern进行分割,并存储到strVec中
boolStringSplit(std::string src, std::string pattern,
std::vector<std::string>& strVec)
{
std::string::size_type pos;
src +=pattern;//扩展字符串以方便操作
int size=src.size();
for(int i=; i<size; i++)
{
pos = src.find(pattern,i);
if(pos<size)
{
std::string s=src.substr(i,pos-i);
strVec.push_back(s);
i=pos+pattern.size()-;
}
}
return true;
} //将字符串str中的所有target字符串替换为replacement
bool StringReplace(std::string& src, std::string target, std::string replacement){
std::string::size_type startpos = ;
while (startpos!= std::string::npos)
{
startpos = src.find(target);//找到'.'的位置
if( startpos != std::string::npos ) //std::string::npos表示没有找到该字符
{
src.replace(startpos,,replacement); //实施替换,注意后面一定要用""引起来,表示字符串
}
}
return true;
} //提取路径中的文件名字(带路径,不带扩展名)
//substr字符串中,第一个参数为截取的位置,第二个为截取的长度std::stringStringGetFullFileName(std::string path)
{
return path.substr(, path.rfind('.') == std::string::npos ? path.length() : path.rfind('.') );}
//提取路径中的文件名字
std::string StringGetFileName(std::string path)
{ StringReplace(path, "/", "\\");
std::string::size_type startpos = path.rfind('\\') == std::string::npos ? path.length() : path.rfind('\\')+;
std::string::size_type endpos = path.rfind('.') == std::string::npos ? path.length() : path.rfind('.');
return path.substr(startpos, endpos-startpos);
} //提取路径中文件名字(带扩展名)
std::string StringGetFileNameWithExt(std::string path)
{ StringReplace(path, "/", "\\");
std::string::size_type startpos = path.rfind('\\') == std::string::npos ? path.length() : path.rfind('\\')+;
return path.substr(startpos);
} //提取路径中的文件路径
std::string StringGetDirectory(std::string path)
{ StringReplace(path, "/", "\\");
return path.substr(, path.rfind('\\') == std::string::npos ? path.length() : path.rfind('\\') );
} //提取路径中的文件类型
std::string StringGetFileExt(std::string path)
{ StringReplace(path, "/", "\\");
return path.substr(path.rfind('.') == std::string::npos ? path.length() : path.rfind('.')+ );
}
#ifdef _cplusplus
}
#endif
#endif
基于std::string的字符串处理的更多相关文章
- VC++ 中使用 std::string 转换字符串编码
目录 第1章说明 1 1.1 代码 1 1.2 使用 4 第1章说明 VC++中宽窄字符串的相互转换比较麻烦,借助std::string能大大减少代码量. 1.1 代码 函数声明如下 ...
- C++ std::string 在一个字符串前插入一个字符串几种方式
目录 1.直接使用字符串相加 2.使用insert函数 比较:通过Quick C++ Benchmarks 可得到结果 1.直接使用字符串相加 std::string a = "hello& ...
- [C/C++] String Reverse 字符串 反转
#include <iostream> #include <string> #include <algorithm> #include <cstring> ...
- std::string在多字节字符集环境下substr的实现方法
昨天写到<使用多字节字符集的跨平台(PC.Android.IOS.WP)编码/解码方法>中提到服务端使用std::string处理字符串,std::string对多字节字符集支持并不是很完 ...
- std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
Copy-on-write(以下简称COW)是一种很重要的优化手段.它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源. ...
- 【超值分享】为何写服务器程序需要自己管理内存,从改造std::string字符串操作说起。。。
服务器程序为何要进行内存管理,管中窥豹,让我们从string字符串的操作说起...... new/delete是用于c++中的动态内存管理函数,而malloc/free在c++和c中都可以使用,本质上 ...
- std::string 字符串替换
std::string 没有原生的字符串替换函数,需要自己来完成 string& replace_str(string& str, const string& to_repla ...
- std::string 字符串切割
在很多字符串类库里都实现了split函数.不过在std里没有实现.在这里拿出几个: 1. 用单字符作为分隔 #include <string> #include <vector> ...
- std::string 字符串大小写转换(转)
该问题归结为std::transform函数的使用 函数原型 template < class InputIterator, class OutputIterator, class UnaryO ...
随机推荐
- 使用rlwrap调用sqlplus中历史命令
此文来自http://www.cnblogs.com/mchina/archive/2013/03/08/2934473.html 在此谢谢原创作者. 在Linux中运行SQL*Plus,不能调用历史 ...
- PHP和shell脚本遍历目录及其下子目录
用shell写了个递归遍历目录的脚本,本脚本实现递归遍历指定目录,打印目录下的文件名(全路径). #!/bin/sh function scandir() { local cu ...
- saltstack安装
环境: 172.16.202.104 stack-master 172.16.202.108 stack-node01 172.16.202.105 stack-node02 安装 导入yum源认证的 ...
- 《转》python学习(3)
转自http://www.cnblogs.com/BeginMan/archive/2013/06/03/3114974.html 1.print语句调用str()函数显示,交互式解释器调用repr( ...
- Android 命令行打包和签名
使用命令行方式进行签名需要JDK中的两个命令行工具:keytool.exe和jarsigner.exe.可按如下两步对apk文件进行签名: 1. # keytool -genkey -v -keyst ...
- sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析
昨天无意中在网上看到一篇讲解sencha touch组件选择器的文章,名为 Sencha touch 2通过Ext.ComponentQuery.query查找组件. 里面对组件选择器的效率讲解完全反 ...
- WEB安全第六篇--千里之外奇袭客户端:XSS和HTML注入
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- 真机远程页面调试工具spy-debugger 3.x:集成weinre+AnyProxy,页面调试+抓包。调试生产HTTPS页面。
.页面调试+抓包 2.操作简单 3.支持HTTPS. 4.spy-debugger内部集成了weinre.node-mitmproxy.AnyProxy. 5.自动忽略原生App发起的https请求, ...
- 【BZOJ4698】Sdoi2008 Sandy的卡片 后缀数组+RMQ
[BZOJ4698]Sdoi2008 Sandy的卡片 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡 ...
- nginx:服务器集群
一.Nginx的事件处理机制 对于一个基本的web服务器来说,事件通常有三种类型,网络事件.信号.定时器. 首先看一个请求的基本过程:建立连接---接收数据---发送数据 . 再次看系统底层的操作 : ...