码迷,mamicode.com
首页 > 其他好文 > 详细

字符串 分割

时间:2014-04-30 21:30:39      阅读:518      评论:0      收藏:0      [点我收藏+]

标签:des   com   http   blog   style   class   div   img   code   java   c   

一、用strtok函数进行字符串分割

原型: char *strtok(char *str, const char *delim);

功能:通过一系列调用来 分解字符串为一组字符串。

参数说明:str为要分解的字符串,delim为分隔符字符串。

返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。

//借助strtok实现split

bubuko.com,布布扣
#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;
}
bubuko.com,布布扣

 

二、用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)
返回值:子字符串 

实现如下:

//字符串分割函数

 

bubuko.com,布布扣
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;
}
bubuko.com,布布扣

 

 

  

三、用Boost库的正则表达式 进行字符串的分割


实现如下:

bubuko.com,布布扣
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;
}
bubuko.com,布布扣

 

字符串 分割,布布扣,bubuko.com

字符串 分割

标签:des   com   http   blog   style   class   div   img   code   java   c   

原文地址:http://www.cnblogs.com/xaf-dfg/p/3698975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!