字符串按照特定字符进行分割是编程时候经常要用到方法
来源:互联网 发布:淘宝店铺贷款在哪里 编辑:程序博客网 时间:2024/05/16 09:56
字符串按照特定字符进行分割是编程时候经常要用到方法
MFC中CString 和std::string 常可以用 find() + Mid() 的方法来实现
CString实现:
- 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实现
- 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 * 实现:
- 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);
- }
- 字符串按照特定字符进行分割是编程时候经常要用到方法
- SQL 按照特定字符分割字符串
- 按照特定分割符进行字符串的分割
- iOS NSString字符串按照特定字符分割成数组
- C#下按照指定字符进行字符串分割
- 按照特定符号分割字符串为数组
- c#字符串以特定字符串进行分割
- 字符串按照多个字符分割
- 将字符串按照指定的长度进行分割(一个中文视为两个字符)
- C 语言使用特定字符分割字符串
- C# 以特定字符分割字符串--IP地址分割
- java编程基础经常用到的方法
- split按照特殊符号分割字符串的方法
- 按照指定的字符分割字符串形成字符数组
- 按照指定的字符串分割字符串形成字符数组
- JS把字符串按照特定的字母顺序进行排序
- SQL分割字符串,SQL按照指定字符分割字符串,SQL处理字符串...
- SQL分割字符串,SQL按照指定字符分割字符串,SQL处理字符串...
- Ogre中实现换装系统
- 计算机基础知识学习(网络必备)强烈推荐!!!
- 2010后照明市场六大产品将走俏!
- 计算机基础知识学习(网络必备)强烈推荐!!!
- Mysql数据类型
- 字符串按照特定字符进行分割是编程时候经常要用到方法
- 计算机基础知识学习(网络必备)强烈推荐!!!
- DBMS_SCHEDULE
- PHP程序员最易犯10种错误(转载)
- XML文件结构和基本语法
- 计算机基础知识学习(网络必备)强烈推荐!!!
- 自动处理头文件的依赖关系
- 聊天室代码
- DOS 下循环命令 FOR