/**
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