zoukankan      html  css  js  c++  java
  • 结构笔记—串的基本操作及串的模式匹配算法

    下面实现几种串的基本操作,这些操作是构成串其他复杂操作的基石。因为相对简单,功能和分析的说明均在代码实现中。

    /*动态分配存储结构*/
    typedef struct
    {
        char *ch;
        int length;
    }Str;
    
    /*赋值操作*/
    int strAssign(Str &str, char *ch)
    {
        if(str.ch)
            free(str.ch);  //释放原串空间
    
        int len = 0;
        char *c = ch;
        while(*c)  //求ch串长度
        {
            len++;
            c++;
        }
    
        if(len == 0)  //如果ch为空串,则直接返回空串
        {
            str.ch = NULL;
            str.length = 0;
            return 1;
        }
    
        str.ch = (char*)malloc(sizeof(char) * (len+1));  //取len + 1是为了多分配一个空间存放“”字符
        if(str.ch == NULL)  //申请空间失败
            return 0;
        c = ch;
        for(int i = 0; i <= len; i++)   //注意:循环条件"<="是为了将ch最后的''复制到新串中作为结束标志
            str.ch[i] = *(c++);
        str.length = len;
        return 1;
    }
    
    
    /*求串长度*/
    int StrLength(Str str)
    {
        return str.length;
    }
    
    /*串比较操作
    *串的比较操作是串排序的核心操作
    */
    int strCompare(Str s1, Str s2)
    {
        for(int i = 0; i < s1.length && i < s2.length; i++)
        {
            if(s1.ch[i] != s2.ch[i])
                return s1.ch[i] - s2.ch[i];
        }
        return s1.length - s2.length;
    }
    
    /*串连接操作
    *将两个串首位连接,合成一个字符串的操作称为串连接操作
    */
    int concat(Str &str, Str s1, Str s2)
    {
        if(str.ch)
            free(str.ch);
        
        str.ch = (char*)malloc(sizeof(char) * (s1.length + s2.length +1));
        if(str.ch == NULL)
            return 0;
        int i = 0;
        while(i < s1.length)
            str.ch[i] = s1.ch[i++];
        int j = 0;
        while(j <= s2.length)
            str.ch[i+j] = s2.ch[j++];
        str.length = s1.length + s2.length;
        return 1;
    }
    
    /*求子串操作
    *求从给定串中某一位置开始到某一位置结束的操作称为求子串操作(规定开始位置总是在结束位置前边)
    *以下代码实现求串中从pos位置开始,长度为len的子串,子串由subStr返回给用户
    *函数返回:成功1,失败0
    */
    int subStr(Str &subStr, Str str, int pos, int len)
    {
        if(pos < 0 || len < 0||  pos + len > str.length)
            return 0;
        if(subStr.ch)
            free(subStr.ch);
    
        if(len == 0)
        {
            subStr.ch = NULL;
            subStr.length = 0;
            return 1;
        }
    
        subStr.ch = (char*)malloc(sizeof(char) * (len+1));
        if(subStr.ch == NULL)
            return 0;
        int i = 0, j = pos;
        while(j < pos + len)
            subStr.ch[i++] = str.ch[j++];
        subStr.ch[i] = '';
        subStr.length = len;
        return 1;
    }
    
    /*串清空操作*/
    int clearStr(Str &str)
    {
        if(str.ch)
        {
            free(str.ch);
            str.ch = NULL;
        }
        str.length = 0;
        return 1;
    }

    串的匹配模式算法

  • 相关阅读:
    201521044091《Java程序设计》第7周学习总结
    201521044091《java程序设计》第四次总结
    201521044091 《java程序设计》第八周学习总结
    201521044091 《Java程序设计》第5周学习总结
    201521044091 《Java程序设计》第2周学习总结
    201521044091 《Java程序设计》第3周学习总结
    MySQL设置字符集CHARACTER SET
    Create My MySQL configuration by Percona
    How to use jQuery to manipulate Cookies
    How to use OpenXml to import xml data to Sql server
  • 原文地址:https://www.cnblogs.com/evenleee/p/8545149.html
Copyright © 2011-2022 走看看