<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C++的字符串分割函數的使用詳解

    時間:2025-06-01 19:19:43 C語言 我要投稿
    • 相關推薦

    C++的字符串分割函數的使用詳解

      經常碰到字符串分割的問題,下面,就和小編一起來看一看C++的字符串分割函數的使用詳解,希望對大家有幫助!

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

      原型: 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("%sn",p);

      p=strtok(NULL,d);

      }

      return 0;

      }

      運行效果:

      二、用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)

      返回值:子字符串

      實現如下:

      //字符串分割函數

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

      }

      完整代碼:

      /*

      File  : split1.cpp

      Author : Mike

      */

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

      }

      int main()

      {

      std::string str;

      std::cout<<"Please input str:"<<std::endl;

      //std::cin>>str;

      getline(std::cin,str);

      std::string pattern;

      std::cout<<"Please input pattern:"<<std::endl;

      //std::cin>>pattern;

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

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

      std::cout<<"The result:"<<std::endl;

      for(int i=0; i<result.size(); i++)

      {

      std::cout<<result[i]<<std::endl;

      }

      std::cin.get();

      std::cin.get();

      return 0;

      }

      運行效果:

      三、用Boost進行字符串的分割

      用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

      */

      #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();i<size;i++)

      {

      std::cout<<vec[i]<<std::endl;

      }

      std::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++的字符串分割函數的使用詳解】相關文章:

    php字符串分割的詳解05-20

    c++函數指針使用示例07-26

    excel 2013函數公式使用詳解04-18

    詳解PHP用substr函數截取字符串03-01

    PHP常用字符串相關函數詳解03-09

    詳解c語言字符數組與字符串的使用05-25

    c語言字符數組與字符串的使用詳解03-02

    php中利用explode函數分割字符串到數組02-20

    PHP中strtotime函數使用方法詳解04-15

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人