字符串 分割

1、用strtok函數進行字符串分割php

原型: char *strtok(char *str, const char *delim);正則表達式

功能:經過一系列調用來 分解字符串爲一組字符串。函數

參數說明:str爲要分解的字符串,delim爲分隔符字符串。this

返回值:從str開頭開始的一個個被分割的串。當沒有被分割的串時則返回NULL。spa

//藉助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;
}

 

2、用STL進行字符串的分割 code

涉及到string類的兩個函數find和substr:
一、find函數
原型:size_t find ( const string& str, size_t pos = 0 ) const;
功能:查找子字符串第一次出現的位置。
參數說明:str爲子字符串,pos爲初始查找位置。
返回值:找到的話返回第一次出現的位置,不然返回string::npos blog

二、substr函數
原型:string substr ( size_t pos = 0, size_t n = npos ) const;
功能:得到子字符串。
參數說明:pos爲起始位置(默認爲0),n爲結束位置(默認爲npos)
返回值:子字符串 token

實現以下:字符串

//字符串分割函數

 

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;
}

 

 

  

3、用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;
}
相關文章
相關標籤/搜索