C++字符串分割方法总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
3 {
4 std::string::size_type pos;
5 std::vector
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 12 { 13 std::string::size_type pos; 14 std::vector 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 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 } 运行效果: