C++字符串分割方法总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

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

1//借助strtok实现split

2 #include

3 #include

4

5int main()

6 {

7char s[] = "Golden Global View,disk * desk";

8const char *d = " ,*";

9char *p;

10 p = strtok(s,d);

11while(p)

12 {

13 printf("%s\n",p);

14 p=strtok(NULL,d);

15 }

16

17return0;

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::vector split(std::string str,std::string pattern)

3 {

4 std::string::size_type pos;

5 std::vector result;

6 str+=pattern;//扩展字符串以方便操作

7int size=str.size();

8

9for(int i=0; i

10 {

11 pos=str.find(pattern,i);

12if(pos

13 {

14 std::string s=str.substr(i,pos-i);

15 result.push_back(s);

16 i=pos+pattern.size()-1;

17 }

18 }

19return result;

20 }

完整代码:

1/*

2File : split1.cpp

3Author : Mike

4E-Mail : Mike_Zhang@

5*/

6 #include

7 #include

8 #include

9

10//字符串分割函数

11 std::vector split(std::string str,std::string pattern)

12 {

13 std::string::size_type pos;

14 std::vector result;

15 str+=pattern;//扩展字符串以方便操作

16int size=str.size();

17

18for(int i=0; i

19 {

20 pos=str.find(pattern,i);

21if(pos

22 {

23 std::string s=str.substr(i,pos-i);

24 result.push_back(s);

25 i=pos+pattern.size()-1;

26 }

27 }

28return result;

29 }

30

31int main()

32 {

33 std::string str;

34 std::cout<<"Please input str:"<

35//std::cin>>str;

36 getline(std::cin,str);

37 std::string pattern;

38 std::cout<<"Please input pattern:"<

39//std::cin>>pattern;

40 getline(std::cin,pattern);//用于获取含空格的字符串

41 std::vector result=split(str,pattern);

42 std::cout<<"The result:"<

43for(int i=0; i

44 {

45 std::cout<

46 }

47

48 std::cin.get();

49 std::cin.get();

50return0;

51 }

运行效果:

相关文档
最新文档