4.1 串的順序存儲結構
阿新 • • 發佈:2018-10-24
vat 存儲結構 private 構造 ras imp 錯誤 http 結果
<?php header("content-type:text/html;charset=utf-8"); class Linear_string{ /** * 串的順序存儲結構的基本操作 * *包括 * 1.順序串的初始化 __contruct() * 2.生成一個值等於字符串常量chars的串 strAssign() * 3.返回串的元素個數,即串的長度 strLength() * 4.返回串的自第pos個字符起長度為len的子串 subString() * 5.將string1和string2連接成一個新串 concat() * 6.比較兩個串的大小,若string1>string2,則返回值>0;若string1=string2,則返回值=0;若string1<string2,則返回值<0 strCompare() * 7.在串的第pos個字符起長度為len的子串 strInsert() * 8.若主串中第pos個字符之後存在與string相等的子串,則返回串string在主串中第一次出現的位置 index()*/ private $string; private $length; //構造函數 public function __construct($string) { $this->length =strlen($string); $this->string = $string; } //生成一個值等於字符串常量chars的串 public function strAssign($chars=null){ if(strlen($chars) > $this->length){echo "字符串長度過長"; return false; } $this->string = substr($this->string,0,strlen($chars));//將初始字符串截斷的和chars一樣長 for($i = 0;$i<strlen($chars);$i++){ $this->length = strlen($chars); $this->string[$i] = $chars[$i] ; } }//返回串的元素個數,即串的長度 public function strLength(){ return $this->length; } //返回串的自第pos個字符起長度為len的子串 public function subString($pos,$len){ $sub = ‘‘; if($pos<0 || $pos>$this->length || $len<0 || $pos+$len>$this->length){ echo "索引長度過長"; return false; }else{ for($i=$pos,$j=0;$i<$pos+$len;$i++,$j++){ $sub[$j] = $this->string[$i]; } $sub = implode("",$sub); return $sub; } } //將string1和string2連接成一個新串 public function concat($string1,$string2){ $totallength = $string1->length+$string2->length; if( $totallength<= $this->length){ $this->string = substr($this->string,0,$totallength); $this->length = $totallength; for ($i = 0;$i<$string1->length;$i++){ $this->string[$i] = $string1->string[$i]; } for($i=0;$i<$string2->length;$i++){ $this->string[$i+$string1->length] = $string2->string[$i]; } } } //比較兩個串的大小,若string1>string2,則返回值>0;若string1=string2,則返回值=0;若string1<string2,則返回值<0 public function strCompare($string1,$string2){ for($i=0;$i<$string1->length && $i<$string2->length;$i++){ //在兩個串長度相同的部分內進行比較,若兩串不相等則進行相減並退出循環,若兩串則退出循環 if($string1->string[$i]!=$string2->string[$i]){ return (ord($string2->string[$i]) - ord($string1->string[$i])); break; } } return $string2->length - $string1->length;//退出循環證明兩串長度相等部分的內容是一樣的,而此時若長度不等,再進行相減,得出結果 } //在串的第pos個字符起長度為len的子串 public function strInsert($pos,$string){ if($pos<0 || $pos>$this->length){ echo "索引長度錯誤"; return false; } $this->length += $string->length; for($i = $this->length;$i>=$pos;$i--){ $this->string[$i+$string->length]=$this->string[$i]; } for($i=$pos;$i<$pos+$string->length;$i++){ $this->string[$i] = $string->string[$i-$pos]; } } //從串的第pos個字符之前刪除長度為len的子串 public function strDelete($pos,$len){ if($pos<0 || $pos>$this->length || $pos+$len>$this->length){ echo "索引長度錯誤"; return false; } for($i=$pos+$len;$i<$this->length;$i++){ $this->string[$i-$len] = $this->string[$i]; } $this->length -= $len; $this->string = substr($this->string,0,$this->length); } //若主串中第pos個字符之後存在與string相等的子串,則返回串string在主串中第一次出現的位置 public function index($pos,$string){ if($pos<0 || $pos>$this->length){ echo "索引長度錯誤"; return false; } $length = $this->length; $length_sub = $string->length; $i = $pos; while($i <$length-$length_sub+1){ $sub = $this->subString($i,$length_sub); $sub = new Linear_string($sub); if($this->strCompare($sub,$string) != 0){ ++$i; }else return $i; } return 0; } } ?>
實現上述函數:
<?php header("content-type:text/html;charset=utf-8"); include ‘linear_string.class.php‘; $string = "xiaolinzifendoudediandi"; echo "初始化串:"; echo "</br>"; $linear_string = new Linear_string($string); print_r($linear_string); echo "</br>"; echo "</br>"; echo "獲取2到5的子串:"; echo "</br>"; $sub = $linear_string->subString(2,5); echo($sub); echo "</br>"; echo "</br>"; echo "連接兩個串lin和qinhua:"; echo "</br>"; $string1 = new Linear_string("lin"); $string2 = new Linear_string("qinhua"); $linear_string->concat($string1,$string2); print_r($linear_string); echo "</br>"; echo "</br>"; echo "比較兩個串zuasha和zuashan的大小:"; echo "</br>"; $string1 = new Linear_string("zuasha"); $string2 = new Linear_string("zuashan"); $strcom = $linear_string->strCompare($string1,$string2); echo($strcom); echo "</br>"; echo "</br>"; echo "在索引3處插入一個子串xinru:"; echo "</br>"; $string = new Linear_string("xinru"); $linear_string->strInsert(3,$string); print_r($linear_string); echo "</br>"; echo "</br>"; echo "在索引3處刪除一個長度為5的子串:"; echo "</br>"; $linear_string->strDelete(3,5); print_r($linear_string); echo "</br>"; echo "</br>"; echo "若主串中第3個字符之後存在與in相等的子串,則返回串in在主串中第一次出現的位置:"; echo "</br>"; $string = new Linear_string("in"); $index = $linear_string->index(3,$string); echo $index; ?>
最後的實現結果:
4.1 串的順序存儲結構