• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Cpper
            C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿
            由于需要使用c++對(duì)字符串進(jìn)行切割
            故對(duì)相關(guān)的知識(shí)做一個(gè)總結(jié)
            1.使用
            std::stringstream
            切割字符串
            比如:
                std::stringstream str(text);
                std::
            string tok;
                
            while(getline(str,tok,(char)32)){}
            2.還是使用std::stringstream流析出
            比如:
                std::stringstream str(s);
                
            string t1,t2,t3,t4;
                str 
            >>t1;
                str 
            >>t2;
                str 
            >>t3;
                str 
            >>t4;
            3.使用strtok
            比如:
            char* token = strtok(str.c_str()," ");
            4.使用boost的
            tokenizer
            比如:
            boost::tokenizer<> ss(s,char_separator(' '));
            for(boost::tokenizer<>::iterator beg=ss.begin(); beg!=ss.end(); ++beg){cout<<*beg<<endl;}
            不過(guò)其默認(rèn)的分隔為空格和標(biāo)點(diǎn)符號(hào)
            如果需要定制其模板參數(shù)
            可以按照下面的書(shū)寫(xiě):
            class char_separator
            {
            public:      
                char_separator(
            char c):sep(c){}
                
            void reset(){}
                template 
            <typename InputIterator,typename Token>
                
            bool operator()(InputIterator& next,InputIterator end,Token& tok)
                {
                    tok 
            = Token();
                    
            for(;next != end && *next == sep;++next);
                    
            if (next == end) 
                        
            return false;
                    
            for(;next != end && *next != sep;++next)
                    {
                        tok 
            += *next;
                    }
                    
            return true;
                }
            private:
                
            char sep;
            }; 
            比如:
            boost::tokenizer<char_separator> mytok(str,char_separator('@'));
                
            for(boost::tokenizer<char_separator>::iterator beg=mytok.begin(); beg!=mytok.end(); ++beg)
                {
                    
            if(index == 0)
                        text1 
            = *beg;
                    
            else if(index == 1)
                        text2 
            = *beg;
                    
            else if(index == 2)
                        text3 
            = *beg;
                    
            else if(index == 3)
                        text4 
            = *beg;            
                    index
            ++;
                }
            5.還是boost.
            #include <cstdlib>
            #include 
            <iostream>
            #include 
            <string>
            #include 
            <vector>
            #include 
            <iostream>
            #include 
            <iterator>
            #include 
            <functional>
            #include 
            <boost/algorithm/string/classification.hpp>
            #include 
            <boost/algorithm/string/split.hpp>
            #include 
            <boost/algorithm/string/find_iterator.hpp>

            using namespace std;
            using namespace boost;

            int main(int argc, char *argv[])
            {
                vector
            <string> strlist;
                
            string str("12 34 56 678  ccsdu2004");
                split(strlist,str,is_any_of(
            " "),token_compress_on);

                
            for(unsigned int index=0;index<strlist.size();index++)
                {
                    cout
            <<index <<":"<<strlist[index]<<endl;
                };
                    
                system(
            "PAUSE");
                
            return EXIT_SUCCESS;
            }
            6.其他不知道的方法若干
            ...

            posted on 2010-08-04 14:16 ccsdu2009 閱讀(2902) 評(píng)論(3)  編輯 收藏 引用 所屬分類(lèi): 雜項(xiàng)
            Comments
            • # re: c++字符串切割
              又一法
              Posted @ 2010-08-06 17:15
              // From the Chromium source code:

              template<typename STR>
              static size_t TokenizeT(const STR& str,
              const STR& delimiters,
              std::vector<STR>* tokens) {
              tokens->clear();

              typename STR::size_type start = str.find_first_not_of(delimiters);
              while (start != STR::npos) {
              typename STR::size_type end = str.find_first_of(delimiters, start + 1);
              if (end == STR::npos) {
              tokens->push_back(str.substr(start));
              break;
              }
              else {
              tokens->push_back(str.substr(start, end - start));
              start = str.find_first_not_of(delimiters, end + 1);
              }
              }

              return tokens->size();
              }

              size_t Tokenize(const std::wstring& str,
              const std::wstring& delimiters,
              std::vector<std::wstring>* tokens) {
              return TokenizeT(str, delimiters, tokens);
              }

              size_t Tokenize(const std::string& str,
              const std::string& delimiters,
              std::vector<std::string>* tokens) {
              return TokenizeT(str, delimiters, tokens);
              }

              size_t Tokenize(const Base::StringPiece& str,
              const Base::StringPiece& delimiters,
              std::vector<Base::StringPiece>* tokens) {
              return TokenizeT(str, delimiters, tokens);
              }
                回復(fù)  更多評(píng)論   
            • # re: c++字符串切割
              小志
              Posted @ 2010-08-06 17:52
              什么叫字符串切割??  回復(fù)  更多評(píng)論   
            • # re: c++字符串切割
              陳梓瀚(vczh)
              Posted @ 2010-08-08 23:57
              用C++0x最新tr1::regex類(lèi)  回復(fù)  更多評(píng)論   
             
            日本久久久久亚洲中字幕 | 久久91精品国产91久久麻豆| 奇米影视7777久久精品| 色88久久久久高潮综合影院 | 久久人人爽人人爽人人片av麻烦| 一本色道久久88—综合亚洲精品| 久久777国产线看观看精品| 一97日本道伊人久久综合影院| 伊人久久精品无码二区麻豆| 色综合久久最新中文字幕| 亚洲欧美一级久久精品| 国产精品青草久久久久福利99 | 久久丫精品国产亚洲av| 精品无码久久久久久国产| 69久久夜色精品国产69| 亚洲国产成人精品无码久久久久久综合 | 亚洲AV无码一区东京热久久| 久久国产香蕉一区精品| 久久99国产亚洲高清观看首页 | 99久久精品午夜一区二区| 一本一道久久a久久精品综合 | 亚洲人成伊人成综合网久久久| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 欧美日韩中文字幕久久久不卡| 久久久久人妻一区精品色| 久久综合久久综合亚洲| 少妇被又大又粗又爽毛片久久黑人| 久久亚洲美女精品国产精品| 天天躁日日躁狠狠久久| 日韩乱码人妻无码中文字幕久久 | 久久精品无码一区二区三区免费| 99久久精品国产麻豆| 99久久超碰中文字幕伊人 | 一本一本久久a久久精品综合麻豆| 欧美日韩中文字幕久久久不卡| 久久本道综合久久伊人| 午夜精品久久久久久久无码| 亚洲午夜精品久久久久久浪潮| 亚洲国产成人久久笫一页| 久久人妻无码中文字幕| 91视频国产91久久久|