基于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 ...
随机推荐
- Unity 的OCulus VR开发遇到的坑---OC版本差异
我作为Unity新人,没有用过Unity5之前的任何版本,不熟悉任何操作.所以,就根据官方推荐,使用了5.1.1版本,然后根据官方版本对应推荐,果断选择下载了PC端的OC的0.6.0.1版本,对应的U ...
- iOS文件处理介绍(一)
一.在Documents.tmp和Library中存储文件 Documents:用于存储应用程序中经常需要读取或写入的常规文件. tmp:用于存储应用程序运行时生成的文件.(随着应用程序的关闭失去了利 ...
- system times on machines may be out of sync
今天在hadoop集群执行任务的时候报了一个这个错误,听名字应该是三台机器的时间不同步.于是同步一下时间即可解决 1.安装ntpdate工具 yum -y install ntp ntpdate 2. ...
- sql查询数据库中所有表名
查询数据库里所有表名和字段名的语句SQL 查询所有表名:SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'SELECT * FROM INFORMATION_SCHE ...
- bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
有时候编写脚本时会出现类似标题列出的错误,这个问题大多数是因为你的脚本文件在windows下编辑过.windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下 ...
- JS-点和中括号
今天上午做一个很low的小练习,代码写完了想要封装重复利用来着 可是憋屈啊,怎么都不对,在document.style.width这里,想把width变成参数可是用点的话,会报错说找不到点后边这个属性 ...
- LeetCode——Ugly Number
Description: Write a program to check whether a given number is an ugly number. Ugly numbers are pos ...
- poj2096 Collecting Bugs[期望dp]
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 5394 Accepted: 2670 ...
- ORA-28056 解决方法
用pl/sql devlper 来连接oracle数据库,遇到 0RA-28056错误,解决的方法是 在 计算机-->管理 -->事件查看器里边清理应用程序日志(问题原因是应用程序的日志满 ...
- CHMOD命令怎么用?
文件/目录权限设置命令:chmod 这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限.该命令有两种用法: 用包含字母和操作符表达式的文字设定法 其语法格式为:chmod [w ...