数据结构5月14日上机(字符串的基本操作)

#include<stdio.h>
#define maxsize 100
typedef struct{
    char A[maxsize];
    int n;
}SeqString;

void Assign(SeqString &L,char B[]){
    int i=0;
    while(B[i]!='\0'){
        L.A[i]=B[i];
        i++;
    } 
    L.n=i;
}

void DisqStr(SeqString &L){
    printf("L.B字符串为:");
    for(int i=0;i<L.n;i++){
        printf("%c",L.A[i]);
    }
    printf("\n");
}

void Strlength(SeqString &L){
    printf("字符串L.A的长度为:%d\n",L.n);
}

int  concat(SeqString &L,char C[]){
    int i=0,j;
    while(C[i]!='\0'){
        i++;
    }
    for(j=0;j<i;j++){
        L.A[j+L.n]=C[j];
    }
    printf("将串C连接到L.A后得到的字符串为:%s\n",L.A);
    return i;
}

void StrEqual(SeqString &L,char C[],int i){
    int k=0,a;
    a=L.n>=i?L.n:i;
    printf("比较L.A和B的字符串大小!(L.A等于C输出0,L.A大于C输出1,L.A小于C输出-1)\n");
    for(int j=0;j<a;j++){
        if(L.A[j]==C[j]){
            k++;
        }else if(L.A[j]>C[j]){
            printf("1\n");
            break; 
        }else {
            printf("-1\n");
            break;
        }
    }
    if(k==a){
        printf("0\n");
    }
    }

void InsStr(SeqString &L,int n,int m){
    int i;
    printf("L.A字符串第%d个位置开始的第%d个字符为:",n,m);
    for(i=n-1;i<n+m-1;i++){
        printf("%c",L.A[i]);
    }
    printf("\n");
}

void DelStr(SeqString &L,int n,int m){
    int i;
    L.n=L.n-m;
    for(i=n;i<=L.n;i++){
        L.A[i-1]=L.A[i+m-1];
    }
    printf("删除第%d个位置的%d个字符之后组成新的字符串为:",n,m);
    for(i=0;i<L.n;i++){
        printf("%c",L.A[i]);
    } 
}

void InStr(SeqString &L,int n,int m,char C[]){
    int a[L.n-n+1]; 
    for(int i=0;i<L.n-n+1;i++){
            a[i]=L.A[i+n-1];
    }  
    for(int i=0;i<m;i++){
        L.A[i+n-1]=C[i];
    }
    for(int i=0;i<L.n-n+1;i++){
        L.A[n+m-1+i]=a[i];
    }    
    L.n=L.n+m;
    printf("将C插在L.A的第%d个位置构成的字符串为:",n);
    for(int i=0;i<L.n;i++){
        printf("%c",L.A[i]);
    }
    printf("\n");
}

void Find (SeqString &L,char D[]){
    int n=0,i,j,k;
    while(D[n]!='\0'){
        n++ ; 
    }
    for(i=0;i<L.n-n;i++){
       for(j=0,k=i;j<n;j++,k++){
          if(D[j]!=L.A[k]){
            break;
        } } 
        if(j==n){
        printf("D是L.A字符串中从第%d位置到第%d的位置的字符串:\n",i+1,i+n); 
        }         
    }
    return;  
   } 

int main(){
    int i,n,m,a,b,k;
    char B[5],C[]="abcdefg",D[4]="cde";
    SeqString L;
    printf("请输入一个最大长度为5的字符串:"); 
    gets(B);
    Assign(L,B);
    DisqStr(L);
    Strlength(L);
    i=concat(L,C);
    StrEqual(L,C,i);
    printf("请输入要查找从第几个位置开始到后面的第几个字符:");
    scanf("%d %d",&n,&m);
    InsStr(L,n,m); 
    printf("请输入在第几个位置插入字符串C:");
    scanf("%d",&k);
    InStr(L,k,i,C);
    printf("请查找字符串D在L.A字符串中的位置:\n");
    Find(L,D); 
    printf("请输入要删除第几个位置开始的几个字符:");
    scanf("%d %d",&a,&b);
    DelStr(L,a,b);
    return 0;
} 

 

posted @ 2019-05-19 16:03  何媛媛  阅读(250)  评论(0编辑  收藏  举报