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

            jake1036

            larbin源碼分析(二) gloabl文件 LarbinString類對象的實現

            LarbinString類對象的實現

             一 該類介紹
                 LarbinString類主要是字符串處理,主要的成員參數是 char * chaine 表示字符串的內容存儲的指針地址。
                 還有pos 表示當前string的位置,size表示最大的容量。
                 成員函數,都為一些添加字符,添加緩沖區的操作。其中的主要的是 recycle() ,getString() ,giveStirng()等函數。
              二 類的頭文件
                 

            // Larbin
            // Sebastien Ailleret
            // 20-12-99 -> 05-05-01

            #ifndef STRING_HH
            #define STRING_HH

            #include 
            <assert.h>

            #include 
            "types.h"
            #include 
            "utils/debug.h"

            class LarbinString {
              
              
            private :
                
            char * chaine ; //內存指針
                uint pos ;       //當前位置
                uint size ;     //總共的大小
              public :
                
            //Constructor       
                LarbinString(uint size= STRING_SIZE) ;
                
            ~LarbinString() ;
                
            //Recycle this string
                void recycle(uint size=STRING_SIZE) ;
                
            //get the char * 
                
            //it is deleted when you delete this Stringobject   
                char * getString() ;
                
            //give a char * : it creates a new one  
                char * giveString();
                
            //append a char
                void addChar(char c) ;
                
            //append a char *
                void addString(char * s) ;
                
            //append a buffer
                void addBuffer(char * s , uint len) ;
                
            //length of the string
                inline uint getLength() {return pos ;}
                
            //get a char of this string 
                inline uint operator[] (uint i)
                
            {
                  assert(i
            <=pos) ;
                  
            return chaine[i] ;
                }

                
            //change a char 
                void setChar(uint i , char c) ;
                 




            }
            ;

            #endif // STRING_HH


              三 實現代碼
                  
                  該代碼實質上是實現了,一個string類型,可以自動地增長容量,實現動態地增添操作。

            // Larbin
            // Sebastien Ailleret
            // 20-12-99 -> 10-12-01

            #include 
            <string.h>
            #include 
            <iostream>

            #include 
            "options.h"

            #include 
            "utils/text.h"
            #include 
            "utils/string.h"

            using namespace std ;
            // Constructor
            LarbinString::LarbinString (uint size) {
              chaine 
            = new char[size] ;
              pos 
            = 0 ;
              
            this->size = size ;
              chaine[
            0= 0 ;
            }


            // Destructor
            LarbinString::~LarbinString () {
              delete [] chaine ;
            }


            // Recycle this string
            void LarbinString::recycle (uint size) {
               
            if(this->size > size)  //當大小小于當前的大小時 
               {
                    delete [] chaine ;
                    chaine 
            = new char[size] ;
                    
            this->size = size ;
               
               }
              
               pos 
            = 0 ; 
               chaine[
            0= 0 ;
             
            }


            // get the char *
            char *LarbinString::getString () {
             
            return chaine ;
            }


            /** give a new string (allocate a new one
             * the caller will have to delete it
             
            */

            char *LarbinString::giveString () {
              
            return newString(chaine) ;
            }


            // append a char
            void LarbinString::addChar (char c) {
              chaine[pos] 
            = c;
              pos
            ++ ;
              
            if(pos >= size) //如果當前的
              {
                
            char * tmp = new char[2 * size] ;  
                memcpy(tmp , chaine , pos) ;
                delete [] chaine ;
                chaine 
            = tmp ;
                size 
            *= 2 ;
              }

              chaine[pos] 
            = 0 ;
            }


            // append a char *
            void LarbinString::addString (char *s) {
              
            uint len = strlen(s);
              addBuffer(s, len);
            }


            // append a buffer
            void LarbinString::addBuffer (char *s, uint len) {
              
            if (size <= pos + len) {
                size 
            *= 2;
                
            if (size <= pos + len) size = pos + len + 1;
                
            char *tmp = new char[size];
                memcpy(tmp, chaine, pos);
                delete [] chaine;
                chaine 
            = tmp;
              }

              memcpy(chaine
            +pos, s, len);
              pos 
            += len;
              chaine[pos] 
            = 0;
            }


            // change a char
            void LarbinString::setChar (uint i, char c) {
              chaine[i] 
            = c;
            }


             四 總結
                  LarbinString類主要進行的是字符串處理,實質上是自己實現了一個String庫。


            posted on 2011-06-11 17:21 kahn 閱讀(319) 評論(0)  編輯 收藏 引用

            久久妇女高潮几次MBA| 久久久久久国产a免费观看不卡| 日韩人妻无码精品久久免费一 | 国产亚洲欧美精品久久久| 国产成人精品久久免费动漫| 99久久99久久精品国产片果冻| 亚洲精品无码久久毛片| 精品无码久久久久国产| 日本久久中文字幕| 日韩亚洲欧美久久久www综合网| 欧美精品福利视频一区二区三区久久久精品| 国产毛片欧美毛片久久久| 国产精品无码久久四虎| 欧美黑人激情性久久| 性做久久久久久久久久久| 久久综合中文字幕| 久久综合久久自在自线精品自| 久久亚洲AV永久无码精品| 国产精品久久国产精麻豆99网站| 久久午夜免费视频| 久久久久亚洲AV成人网人人网站 | 久久大香香蕉国产| 伊人久久亚洲综合影院| 久久伊人五月天论坛| 国产香蕉97碰碰久久人人| 国产成人综合久久综合| 久久狠狠高潮亚洲精品| 久久亚洲中文字幕精品有坂深雪 | 青青草国产精品久久久久| 久久久久亚洲av无码专区导航 | 久久久久久免费一区二区三区| 亚洲精品蜜桃久久久久久| 伊人久久精品影院| 久久久国产99久久国产一| 久久99这里只有精品国产| 亚洲中文字幕伊人久久无码| 久久综合五月丁香久久激情| 一个色综合久久| 亚洲精品乱码久久久久久蜜桃不卡 | 久久伊人五月天论坛| 合区精品久久久中文字幕一区|