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

    串的定长顺序存储结构

    这种结构如果操作中出现序列长度超过上界MAXSTRSIZE的情况时会导致截尾情况,而一般这在实际使用中不是想得到的。

    #include <stdio.h>
    #include <stdlib.h>
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    
    typedef int Status;
    
    #define MAXSTRSIZE 255  /* 串的最大长度 */
    typedef unsigned char SString[MAXSTRSIZE+1];
    
    
    /* 生成一个其值等于chars的串T */
    Status StrAssign(SString T, char chars[])
    {
        int i;
        for(i=0; i < MAXSTRSIZE && chars[i] != ''; i++) 
            T[i+1] = chars[i];
        T[0] = i;    
        if(i >= MAXSTRSIZE) 
            return FALSE;   /* 被截断了 */
        return TRUE;
    }
    
    /* 由串S复制得到串T */
    Status StrCopy(SString T, SString S)
    {
        int i;
        for(i=1; i<=S[0]; i++)
            T[i] = S[i];
        T[0] = i-1;
        if(i>MAXSTRSIZE)
            return FALSE;   /* 截断 */
        return TRUE; 
    }
    
    /* 比较S,T,若S>T返回值>0 ,若S=T,返回0,若S<T,返回值<0 */
    int StrCompare(SString S, SString T)
    {
        int i;
        for(i=1; i<=S[0] && i<=T[0] && S[i] == T[i]; i++)
            ;   /* 判断是否完全相等 */
        i--;
        if( i==T[0] && i==S[0]  ) 
            return 0;
        else 
            return S[i+1] - T[i+1];
    }
    
    /* 清空字符串 */
    Status ClearStr(SString S)
    {
        for(int i=1; i<=S[0]; i++)
            S[i] = 0;
        S[0] = 0;
        return OK;
    }
    
    // Status Index(SString S, SString T, int pos)
    // {
    
    // }
    
    /* 打印串 */
    Status PrintSString(SString T)
    {
        for(int i=1; i<=T[0]; i++)  /* 从第一个字符到最后一个字符 */
            printf("%c",T[i]);
        printf("
    ");
    }
    
    /* 返回串的长度 */
    int StrLength(SString T)
    {
        return T[0];
    }
    
    /* 从串种获取子串 */
    Status SubString(SString Sub, SString S, int pos, int len)
    {
        if(pos<1 || pos>S[0] || len<0 || len>S[0]-pos+1)
            return ERROR;
        for(int i=1,j=pos; i<=len; i++,j++)  
            Sub[i] = S[j];
        Sub[0] = len;
    }
    
    /* 将两个串连接到一个串上 */
    Status Concat(SString T, SString S1, SString S2)
    {
        int i;
        for(i=1; i <= MAXSTRSIZE && i <= S1[0]; i++) 
            T[i] = S1[i];
        T[0] = i-1;
        if(i > MAXSTRSIZE)
            return FALSE;  /* 只储存S1就截断了 */
        for(int j=1; i <= MAXSTRSIZE && j<= S2[0]; i++,j++)
            T[i] = S2[j];
        T[0] = i-1;
        if(i > MAXSTRSIZE)
            return FALSE;  /* 存了第一个,到第二个就截断了 */
        return TRUE;       /* 没有截断 */
    }
    
    
    int main()
    {
        SString T,S1,S2;
    
        StrAssign(S1,"Hello World");
        StrAssign(S2,"Hello World");
        // PrintSString(T);
        
        printf("equ %d
    ",StrCompare(S1,S2));
    
        // StrCopy(S1,T);
        PrintSString(S1);
        return 0;
    }
    
    
  • 相关阅读:
    VM虚拟机Linux和主机数据传输
    Linux CentOS 虚拟机下联网
    SQL 注入漏洞
    BurpSuite 各模块使用
    御剑指纹识别
    C#数组2(多维数组)
    C#数组1
    C#简单的枚举及结构
    ABAP性能1 | LOOP嵌套LOOP代码分析 (转)
    占位符使用(竖式计算)
  • 原文地址:https://www.cnblogs.com/wjundong/p/11627634.html
Copyright © 2011-2022 走看看