C 常用字串分割方法總結!這是乙份很實用的彙總

2021-10-21 01:27:46 字數 4489 閱讀 9166

我們在程式設計的時候經常會碰到字串分割的問題,這裡總結c++常用字串分割方法,分享給大家。

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

功能:分解字串為一組字串。

引數說明:str為要分解的字串,delim為分隔符字串。

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

其它:strtok函式執行緒不安全,可以使用strtok_r替代。

示例:

//借助strtok實現split

#include

#include

int main()

char s = "golden global  view,disk * desk";

const char *d = " ,*";

char *p;

p = strtok(s,d);

while(p)

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

p=strtok(null,d);

return 0;

執行效果如下圖所示:

涉及到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)

返回值:子字串

實現如下:

//字串分割函式

std::vectorsplit(std::string str,std::string pattern)

std::string::size_type pos;

std::vectorresult;

str+=pattern;//擴充套件字串以方便操作

int size=str.size();

for(int i=0; ipos=str.find(pattern,i);

if(posstd::string s=str.substr(i,pos-i);

result.push_back(s);

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

return result;

完整**:

file  : split1.cpp

author  : mike

e-mail  : [email protected]

#include

#include

#include

//字串分割函式

std::vectorsplit(std::string str,std::string pattern)

std::string::size_type pos;

std::vectorresult;

str+=pattern;//擴充套件字串以方便操作

int size=str.size();

for(int i=0; ipos=str.find(pattern,i);

if(posstd::string s=str.substr(i,pos-i);

result.push_back(s);

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

return result;

int main()

std::string str;

std::cout<>str;

getline(std::cin,str);

std::string pattern;

std::cout<>pattern;

getline(std::cin,pattern);//用於獲取含空格的字串

std::vectorresult=split(str,pattern);

std::cout<

std::cin.get();

return 0;

執行效果如下圖所示:

用boost庫的正規表示式實現字串分割

實現如下:

std::vectorsplit(std::string str,std::string s)

boost::regex reg(s.c_str());

std::vectorvec;

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;

完整**:

//本程式實現的是利用正規表示式對字串實現分割

//執行環境  vc6.0 + boost 庫

file  : split2.cpp

author  : mike

e-mail  : [email protected]

#include

#include

#include

#include

#include "boost/regex.hpp"

std::vectorsplit(std::string str,std::string s)

boost::regex reg(s.c_str());

std::vectorvec;

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;

int main()

std::string str,s;

str="sss/ddd/ggg/hh";

s="/";

std::vectorvec=split(str,s);

for(int i=0,size=vec.size();istd::cout<:cin.get>

std::cin.get();

return 0;

執行效果如下圖所示:

補充:最近發現boost裡面有自帶的split的函式,如果用boost的話,還是直接用split的好,這裡就不多說了,**如下:

#include

#include

#include

#include

#include

using namespace std;

int main()

string s = "sss/ddd,ggg";

vectorvstr;

boost::split( vstr, s, boost::is_any_of( ",/" ), boost::token_compress_on );

for( vector::iterator it = vstr.begin(); it != vstr.end(); ++ it )

cout << *it << endl;

return 0;

還沒關注的小夥伴,可以長按關注一下:

C 常用字串分割方法

from 原型 char strtok char str,const char delim 功能 分解字串為一組字串。引數說明 str為要分解的字串,delim為分隔符字串。返回值 從str開頭開始的乙個個被分割的串。當沒有被分割的串時則返回null。其它 strtok函式執行緒不安全,可以使用st...

C 常用字串分割方法

一 用strtok函式進行字串分割 原型 char strtok char str,const char delim 功能 分解字串為一組字串。引數說明 str為要分解的字串,delim為分隔符字串。返回值 從str開頭開始的乙個個被分割的串。當沒有被分割的串時則返回null。其它 strtok函式...

C 常用字串分割方法例項彙總

我們在程式設計的時候經常會碰到字串分割的問題,這裡總結下,也方便我們以後查詢使用。一 用strtok函式進行字串分割 原型 char strtok char str,const char delim 功能 分解字串為一組字串。引數說明 str為要分解的字串,delim為分隔符字串。返回值 從str開...