真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

數(shù)據(jù)結(jié)構(gòu)之串——順序存儲結(jié)構(gòu)(php代碼實現(xiàn))

/**
1. StrToArr(): 將字符串轉(zhuǎn)化為數(shù)組
2. StrCopy(): 字符串的拷貝(深拷貝,即重新申請一塊新的內(nèi)存來存儲數(shù)據(jù))
3. StrEmpty(): 字符串是否為空
4. StrCompare($cmpStr): 比較兩個字符串的大小,如果大于,返回大于零的值;如果小于,返回小于零的值;如果等于,返回等于零的值。
5. StrLength(): 返回字符串的長度
6. ClearString(): 將字符串置為空串
7. Concat($conStr): 聯(lián)接兩個字符串
8. SubString($pos,$len): 返回字符串自pos個字符起,長度為len的字串。若不存在返回空串
9. Index($substr,$pos=0): 返回字串在主串中第pos個字符之后的位置。若不存在返回空串
10. StrInsert($subStr,$pos): 在主串指定的位置pos之前插入子串
11. StrDelete($pos,$len): 刪除主串第pos位置起,長度為len的子串
12. Replace($subStr,$repStr): 使用repStr替換主串中的subStr

注:編程,其實編的都是對存儲在內(nèi)存中的數(shù)據(jù)的四個基本操作,即增,刪,改,查。這與數(shù)據(jù)庫的CURD操作基本一樣。而比較比較復(fù)雜的操作也只不過是結(jié)合這四個基本操作來完成的。所以,掌握數(shù)據(jù)的存儲結(jié)構(gòu),也就掌握了最根本的編程技巧。
*/


class SqStr{
   public $str;//保存字符串的數(shù)組
   private $length;//字符串的長度


   public function __construct($str=''){
       $this->str=$str;
       $this->length=strlen($str);
   }

   //將字符串轉(zhuǎn)化為數(shù)組
   public function StrToArr(){
       $arr=array();
       for($i=0;$i<$this->length;$i++){
           $arr[]=$this->str[$i];
       }
       return $arr;
   }

   //字符串的拷貝(深拷貝,即重新申請一塊新的內(nèi)存來存儲數(shù)據(jù))
   public function StrCopy(){
       $string=(clone $this);
       return $string->str;
   }

   //字符串是否為空
   public function StrEmpty(){
       if($this->length==0){
           return 'Null';
       }else{
           return 'No Null';
       }
   }

   //比較兩個字符串的大小,如果大于,返回大于零的值;如果小于,返回小于零的值;如果等于,返回等于零的值。
   public function StrCompare($cmpStr){
       error_reporting(E_ALL ^ E_NOTICE);
       for($i=0;$i<$this->length || $i           $str1=ord($this->str[$i]);
           $str2=ord($cmpStr[$i]);
           if($str1 != $str2){
               return $str1 - $str2;
           }
       }
       return '0';
   }

   //返回字符串的長度
   public function StrLength(){
       return $this->length;
   }

   //將字符串置為空串
   public function ClearString(){
       $this->str='';
       $this->length=0;
   }

   //聯(lián)接兩個字符串
   public function Concat($conStr){
       $this->length+=strlen($conStr);
       return $this->str.$conStr;
   }

   //返回字符串自pos個字符起,長度為len的字串。若不存在返回空串
   public function SubString($pos,$len){
       $othLen=$this->length - $pos + 1;
       $str='';
       for($i=$pos;$i<$this->length && $pos>0 && $othLen>$len && $i-$pos<$len;$i++){
           $str.=$this->str[$i-1];
       }
       return $str;
   }
   //或者
   public function SubString2($pos,$len){
       $othLen=$this->length - $pos + 1;
       $str='';
       if($pos<=0 || $pos>$this->length || $len<0 || $len>$othLen){
           return 'ERROR';
       }
       for($i=0;$i<$len;$i++){
           $str.=$this->str[$pos+$i-1];
       }
       return $str;
   }

   //返回字串在主串中第pos個字符之后的位置。若不存在返回空串
   public function Index($substr,$pos=0){
       $sublen=strlen($substr);
       if($pos<0 || $pos>$this->length || $substr ==''){
//            return 'ERROR';
           return 0;
       }
       $i=$pos;
       $j=0;
       while($i<$this->length&&$j<$sublen){
           if($this->str[$i]==$substr[$j]){
               $i++;
               $j++;
           }else{
               $i=$i-$j+1; //之所以這寫,是因為子串在不相等的條件下,分為兩種情況,第一、子串與主串完全不相等,此時的$j始終為0,而$i則每次遞增一;第二、子串與主串部分相等,此時子串$j的增量與主串$i的增量相同,因此增加后$i與$j相減再加一的結(jié)果,就相當(dāng)于原來的$i加一,直到$i=$this->length-1為止。
               $j=0;
           }
       }
       if($j==$sublen){  //當(dāng)$j與字串的長度相等時,才說明主串中有與子串相等的字串
           return $i-$sublen+1;
       }else{
           return 0;
//            return 'ERROR';
       }
   }

   //在主串指定的位置pos之前插入子串
   public function StrInsert($subStr,$pos){
       if($pos<1 || $pos>$this->length+1){
           return 'ERROR';
       }
       $beforeStr=$afterStr='';//$beforeStr表示插入位置之前的子串
                               //$afterStr表示插入位置之后的子串
       for($i=0;$i<$pos-1;$i++){
           $beforeStr.=$this->str[$i];
       }
       for($i=$pos-1;$i<$this->length;$i++){   //之所以$i=$pos-1,其一是因為$pos的取值范圍是從1 到 $this->length,而字串的下標(biāo)是從0 到 $this->length-1
           $afterStr.=$this->str[$i];
       }
       $this->str=$beforeStr.$subStr.$afterStr;
       $this->length=strlen($this->str);
       return $this->str;
   }

   //刪除主串第pos位置起,長度為len的子串
   public function StrDelete($pos,$len){
       if($pos<1 || $pos>$this->length || $len<0){
           return 'ERROR';
       }

       $beforeStr=$afterStr='';//$beforeStr表示刪除位置之前的子串
                               //$afterStr表示刪除位置之后的子串
       for($i=0;$i<$pos-1;$i++){  //之所以要$i<$pos-1,是因為此處是要取得$pos之前的元素,即字串下標(biāo)為$pos-1之前的元素,因此要減一。
           $beforeStr.=$this->str[$i];
       }
       for($i=$pos+$len-1;$i<$this->length;$i++){ //$i=$pos+$len-1 表示要刪除子串之后一個位置的下標(biāo)
           $afterStr.=$this->str[$i];
       }
       $this->str=$beforeStr.$afterStr;
       $this->length=strlen($this->str);
       return $this->str;
   }

   //使用repStr替換主串中的subStr
   public function Replace($subStr,$repStr){
       $i=0;
       do{
           $i=$this->Index($subStr,$i);
           if($i){
               //所謂的替換,從存儲結(jié)構(gòu)上來講就是先刪除原來的,再從原來的位置插入新的。
               $this->StrDelete($i,strlen($subStr));
               $this->StrInsert($repStr,$i);
           }
       }while($i);
       return $this->str;
   }
}

網(wǎng)站題目:數(shù)據(jù)結(jié)構(gòu)之串——順序存儲結(jié)構(gòu)(php代碼實現(xiàn))
新聞來源:http://weahome.cn/article/jgodjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部