zoukankan      html  css  js  c++  java
  • 4.1 串的顺序存储结构

    <?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;
    ?>

    最后的实现结果:

  • 相关阅读:
    PHP中的NULL类型
    js中自定义事件,使用了jQuery
    chrome调试文章
    codeforces 633D
    hdu 1496 Equations
    poj 1286 Necklace of Beads
    poj 2154 Color
    poj 3270 Cow Sorting
    poj 1026 Cipher
    poj 2369 Permutations
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/9846009.html
Copyright © 2011-2022 走看看