数据结构--顺序串

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
 
typedef struct
{
    char data[MaxSize];   //存储数据的数组 
    int len;               //字符串长度 
}SqString;

void StrAssign(SqString &str,char cstr[])   //初始化 
{
    int i;
    for (i=0;cstr[i]!='\0';i++)
        str.data[i]=cstr[i];
    str.len=i;
}

void StrCopy(SqString &s,SqString t)  //复制 
{    
    int i;
    for (i=0;i<t.len;i++)
        s.data[i]=t.data[i];
    s.len=t.len;
}

int StrLength(SqString s)    //返回长度 
{
    return s.len;
}

int ComStr(SqString s,SqString t)   //判断大小 
{
    
    int i; 
        for (i=0;i<s.len;i++){
             if (s.data[i]==t.data[i]) /*有一个对应字符不同时返回0*/
            {        
                return 0;  
            }
            if(s.data[i]>t.data[i]){
                return 1;
                break;
            }
            if(s.data[i]<t.data[i]){
                return -1;
                break;
            }
            
    }
} 

SqString Concat(SqString s,SqString t)     //连接 
{     
    SqString str;  
    int i;
    str.len=s.len+t.len;
    for (i=0;i<s.len;i++) 
        str.data[i]=s.data[i]; 
    for (i=0;i<t.len;i++)  
        str.data[s.len+i]=t.data[i];
    return str;
}
 
 
 SqString SubStr(SqString s,int i,int j)    //子串 
{   
    SqString str;
    int k;
    str.len=0;
    if(i<=0 || i>s.len || j<0 || i+j-1>s.len)
    {      
        printf("参数不正确\n");
        return str;    /*参数不正确时返回空串*/
    }
    for(k=i-1;k<i+j-1;k++)     
        str.data[k-i+1]=s.data[k];
    str.len=j;
    return str;
}

SqString RepStr(SqString s,int i,int j,SqString t)  //替换 
{        
    int k;
    SqString str;
    str.len=0;
    if (i<=0 || i>s.len || i+j-1>s.len)   /*参数不正确时返回空串*/
    {      
        printf("参数不正确\n");
        return str;
    }
    for (k=0;k<i-1;k++)           
        str.data[k]=s.data[k];
    for (k=0;k<t.len;k++)      
        str.data[i+k-1]=t.data[k];
    for (k=i+j-1;k<s.len;k++) 
        str.data[t.len+k-j]=s.data[k];
    str.len=s.len-j+t.len;
    return str;
}

SqString DelStr(SqString s,int i,int j)    //删除 
{    
    int k;
    SqString str;
    str.len=0;
    if (i<=0 || i>s.len || i+j>s.len+1)  /*参数不正确时返回空串*/
    {      
        printf("参数不正确\n");
        return str;
    }
    for (k=0;k<i-1;k++)           
        str.data[k]=s.data[k];
    for (k=i+j-1;k<s.len;k++) 
        str.data[k-j]=s.data[k];
    str.len=s.len-j;
    return str;
}

SqString InsStr(SqString s1,int i,SqString s2)   //插入 
{        
    int j;    
    SqString str;  
    str.len=0;
    if (i<=0 || i>s1.len+1)  /*参数不正确时返回空串*/
    {      
        printf("参数不正确\n");
        return s1;
    }
    for (j=0;j<i-1;j++)        
        str.data[j]=s1.data[j];
    for (j=0;j<s2.len;j++)  
        str.data[i+j-1]=s2.data[j];
    for (j=i-1;j<s1.len;j++)  
        str.data[s2.len+j]=s1.data[j];
    str.len=s1.len+s2.len;
    return str;
}
 
void DispStr(SqString s)   //展现 
{     
    int i;
    if (s.len>0)
    {     
        for (i=0;i<s.len;i++)
            printf("%c",s.data[i]);
        printf("\n");
    }
}
int main()
{
    SqString A,B,C,D,E,F,G;
    printf("一.>>>>>建立串A和B<<<<<<\n");
    StrAssign(A,"Ilove");
    StrAssign(B,"China!!");
    
    printf("<<<<<二.<输出串A>>>>>\n");
    DispStr(A);
    printf("<<<<<三.输出串B>>>>>\n");
    DispStr(B);
 
    printf("<<<<<四.输出串A和串B的长度>>>>>\n");
    printf("A:%d\n",StrLength(A));
    printf("B:%d\n",StrLength(B));
    

    printf("<<<<<五.判断串A和串B相等返回0,A>B返回1,A<B返回-1>>>>>\n"); 
    printf("%d\n",ComStr(A,B));
    

    printf("<<<<<六.将A和B连接生成C:>>>>>\n");
    C=Concat(A,B);
    DispStr(C);
    
    printf("<<<<<七.删除串A的第2个字符开始的2个字符而生成串D>>>>>\n");
    D=DelStr(A,2,2);
    DispStr(D);
    
    printf("<<<<<八.在串A的第3个字符位置插入串B而生成串E>>>>>\n");
    E=InsStr(A,3,B);
    DispStr(E);
    

    printf("<<<<<九.将串A的第2个字符开始的3个字符替换成串B而生成串F>>>>>\n");
    F= RepStr(A,2,3,B);
    DispStr(F);
    
    
    printf("<<<<<十.提取串A的第3个字符开始的4个字符而生成串G>>>>>\n");
    G = SubStr(A,3,4);
    DispStr(G);
    

    printf("<<<<<十一.将A中的内容复制到B中,输出B>>>>>\n");
    StrCopy(B,A);
    DispStr(B);
    
    
 
}

posted @ 2019-05-16 19:18  李振业  阅读(369)  评论(0编辑  收藏  举报