Chinaunix首页 | 论坛 | 博客
  • 博客访问: 873679
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 系统运维

2012-03-24 19:07:58

经常碰到字符串分割的问题,这里总结下,也方便我以后使用。

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

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

功能:分解字符串为一组字符串。

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

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

示例:

1 //借助strtok实现split
2 #include <string.h>
3 #include
4
5 int main()
6 {
7 char s[] = "Golden Global View,disk * desk";
8 const char *d = " ,*";
9 char *p;
10 p = strtok(s,d);
11 while(p)
12 {
13 printf("%s\n",p);
14 p=strtok(NULL,d);
15 }
16
17 return 0;
18 }

运行效果:

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

实现如下:

1 //字符串分割函数
2 std::vectorstring> split(std::string str,std::string pattern)
3 {
4 std::string::size_type pos;
5 std::vectorstring> result;
6 str+=pattern;//扩展字符串以方便操作
7 int size=str.size();
8
9 for(int i=0;i10 {
11 pos=str.find(pattern,i);
12 if(pos13 {
14 std::string s=str.substr(i,pos-i);
15 result.push_back(s);
16 i=pos;
17 }
18 }
19 return result;
20 }

三、用Boost进行字符串的分割
用boost库的正则表达式实现字符串分割
实现如下:

1 std::vectorstring> split(std::string str,std::string s)
2 {
3 boost::regex reg(s.c_str());
4 std::vectorstring> vec;
5 boost::sregex_token_iterator it(str.begin(),str.end(),reg,-1);
6 boost::sregex_token_iterator end;
7 while(it!=end)
8 {
9 vec.push_back(*it++);
10 }
11 return vec;
12 }

好,就这些了,希望对你有帮助。

阅读(2294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~