一、用strtok函数进行字符串分割
原型: char *strtok(char *str, const char *delim);
功能:通过一系列调用来 分解字符串为一组字符串。
参数说明:str为要分解的字符串,delim为分隔符字符串。
返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
//借助strtok实现split
#include <string.h> //这里 如果用<string>,会 出错:‘strtok’ was not declared in this scope #include <stdio.h> int main() { char s[] = "Golden Global View,disk * desk"; /**若string s=“……”;错,因为函数原型char * strtok ( char * str , const char * delimiters );这时需要加 char *l=NULL; //指针 得初始化,分配空间和释放空间前需要判断指针是否为空 //http://www.iteedu.com/plang/ccpp/article/cpointmemory.php
if (l==NULL) delete(l); l=new char(50); strcpy(l,line.c_str()); **/ const char *d = " ,*"; //如果=‘,‘;错,不能从char转换成 const char*; char *p; p = strtok(s,d);//s的原型是 char*,所以若 while(p) { printf("%s\n",p); p=strtok(NULL,d); } return 0; }
二、用STL进行字符串的分割
涉及到string类的两个函数find和substr:
1、find函数
原型:size_t
find ( const string& str, size_t pos = 0 )
const;
功能:查找子字符串第一次出现的位置。
参数说明:str为子字符串,pos为初始查找位置。
返回值:找到的话返回第一次出现的位置,否则返回string::npos
2、substr函数
原型:string
substr ( size_t pos = 0, size_t n = npos ) const;
功能:获得子字符串。
参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos)
返回值:子字符串
实现如下:
//字符串分割函数
std::vector<std::string> split(std::string str,std::string pattern) { std::string::size_type pos; std::vector<std::string> result; str+=pattern;//扩展字符串以方便操作 int size=str.size(); for(int i=0; i<size; i++) { pos=str.find(pattern,i); if(pos<size) { std::string s=str.substr(i,pos-i); result.push_back(s); i=pos+pattern.size()-1; } } return result; }
三、用Boost库的正则表达式 进行字符串的分割
实现如下:
std::vector<std::string> split(std::string str,std::string s) { boost::regex reg(s.c_str()); std::vector<std::string> vec; boost::sregex_token_iterator it(str.begin(),str.end(),reg,-1); boost::sregex_token_iterator end; while(it!=end) { vec.push_back(*it++); } return vec; }
原文:http://www.cnblogs.com/xaf-dfg/p/3698975.html