字符串按照特定字符进行分割是编程时候经常要用到方法
MFC中CString 和std::string 常可以用 find() + Mid() 的方法来实现
CString实现:
Cpp代码
inline static void split(CString src, CString token, vector<CString>& vect)
{
int nend=0;
int nbegin=0;
while(nend != -1)
{
nend = src.Find(token, nbegin);
if(nend == -1)
vect.push_back(src.Mid(nbegin, src.GetLength()-nbegin));
else
vect.push_back(src.Mid(nbegin, nend-nbegin));
nbegin = nend + 1;
}
}
std::string实现
Cpp代码
inline static void split(std::string src, std::string token, vector<std::string>& vect)
{
int nend=0;
int nbegin=0;
while(nend != -1)
{
nend = src.find_first_of(token, nbegin);
if(nend == -1)
vect.push_back(src.substr(nbegin, src.length()-nbegin));
else
vect.push_back(src.substr(nbegin, nend-nbegin));
nbegin = nend + 1;
}
}
上面2个例子中,分割出来字符串都是重新分配了内存的。
例如CString中Mid()函数就会
CString dest;
AllocCopy(dest, nCount, nFirst, 0); //这个地方将会为 dest分配内存空间
return dest;
所以在负荷较高的运行环境下会频繁的分配小块内存和释放小块内存,比较容易生产内存碎片,而且效率也不高。
潜意识中喜欢追求底层细节,让我想了解 在C语言中 char * 到底是怎么实现分割的?
果不其然C语言中的 strtok() 函数能够实现字符串的分割而且效率超高,不需要对分割后的字符串进行内存分配,而只是将被分割字 符中的 分隔符 ( token ) 以\0代替。而大家都知道 字符串都是以\0结尾的,所以这样就达到了将一个整串分割成多个字符串的目的。
char * 实现:
Cpp代码
inline static void Split(const char* content, const char* token, vector<std::string>& vect)
{
if(content == NULL)
return;
int len = strlen(content);
if(len <= 0)
return;
char* pBuf =(char*)malloc(len+1);
strcpy(pBuf , content);
char* str = strtok(pBuf , token);
while(str != NULL)
{
vect.push_back(str);
str = strtok(NULL, token);
}
free(pBuf);
}
分享到:
相关推荐
c/c++复制字符串到剪粘板中
使用C/C++实现字符串的反转,不能使用系统函数
本文实例汇总了C++常用字符串分割方法,分享给大家供大家参考。具体分析如下: 我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用。 一、用strtok函数进行字符串分割 原型: char *...
C/C++实现字符串的拆分截取,输入一个字符串,并输入截取起始位置和截取长度,返回截取到的结果
C语言字符串函数大全C/C++基础 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) ...
C/C++字符串一般通过char* 或wchar_t*来表示,char*表示的是ANSCII字符串, wchar_t*表示Unicode字符串,Unicode字符串在C/C++中一个字符占用两个字节,ANSII字符串一个字符占用一个字节(中文占用两个字节), ...
中英文字符串的切割边界的确定算法 >> 一些背景知识: 1. 一个汉字在c\c++的存储, 使用2个字节(char)存储; 2. 汉字存储的第一个char, 其值一定大于'~'(0111 1110=126),否则将导致识别歧义; 此处, 使用"单ASCII...
c/c++字符串操作大全,基本包含了对字符串的全部操作,简单实用。
需求: 准入授权配置文件有时候分了好几个维度进行配置,例如 company|product|sys这种格式的配置: 1.配置 “sina|weibo|pusher” 表示... 面对这个需求我第一时间想的是如何设计模式串,如何快速实现功能,因为我现
C++字符串分割源码,破解版VC助手,兼容多个windows版本
2021年最新 C/C++中文参考手册
在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。字符串是以“\0”作为结束符。
#二维码(QRcode)生成算法 C语言/C++ 源码 1. 根据输入字符串识别编码模式; 2. 根据输入字符串长度选择合适的QRcode版本; 3. 将编码转换为二进制位流表示为数据码字; 4. 使用多项式生成纠错码; 5. 将数据码和...
c/c++中文帮助文档(API),包含c和c++所有的库函数
Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++ 需要的同学可以下载使用
C语言/C++集成开发环境 Dev-C++。一款优秀的C/C++集成开发软件。
标准C/C++编写的字符串分隔函数,可以设置分隔字符串,解出字符串存到vector里面。有需要的可以下载
C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码
c / c++ / cpp / stl 中文帮助文档手册chm格式下载 C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String...