C/C++中的字符串分割
2011-09-24 21:29
309 查看
C/C++中的字符串分割
转自http://apps.hi.baidu.com/share/detail/37296066
字符串按照特定字符进行分割是编程时候经常要用到方法
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);
}
转自http://apps.hi.baidu.com/share/detail/37296066
字符串按照特定字符进行分割是编程时候经常要用到方法
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++字符串处理的一个例子:1.查找一个字符在字符串中第n次出现的位置。2分割字符串
- C++ 又一个字符串分割算法
- C++常用字符串分割方法(转)
- leetcode 434. Number of Segments in a String 按照空格分割字符串 + C++的stringstream的一个很好应用示范
- C++:实现split分割字符串
- c++ 字符串分割一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:
- 函数字符串C++的String类的字符串分割实现----(效果等于Java的String类的split函数)
- C C++ 字符串分割
- C/C++ 分割字符串的多种方式
- 【C++】字符串分割 strtok_s
- c++ 使用正则表达式分割字符串
- C++ 字符串分割,分割到vector中
- C++ 字符串分割
- C++常用字符串分割方法
- C++的String类的字符串分割实现----(效果等于Java的String类的split函数)
- C++:实现split分割字符串
- C++中如何分割字符串
- C++字符串分割
- C++实现字符串的分割和替换
- C++ 字符串分割