字符串


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

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

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

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

int  Length(char ch2[]){
    int i=0,j;
    while(ch2[i]!=''){
        i++;
    }
    return i;
}

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

void InsStr(SeqString &L,int n,int m){
    int i;
    if(n<1||n>L.n||n+m>=L.n+2){
    	printf("位置选择错误,查找失败!
"); 
	}
    else {
	    printf("L.ch字符串第%d个位置开始的第%d个字符为",n,m);
        for(i=n-1;i<n+m-1;i++){
            printf("%c",L.ch[i]);
    }} 
    printf("
");
}

void DelStr(SeqString &L,int n,int m){
    int i;
    if(n<1||n>L.n||m<1||m>L.n){
    	printf("位置选择错误,删除失败!");
	}
    else{
       for(i=n-1;i<=L.n;i++){
          L.ch[i]=L.ch[i+m];
    }
    L.n=L.n-m;
        printf("删除第%d个位置的%d个字符之后组成新的字符串为:",n,m);
        for(i=0;i<L.n;i++){
            printf("%c",L.ch[i]);
    } }
}

void InStr(SeqString &L,int n,int m,char ch2[]){
	if(n<1||n>L.n+1){
		printf("位置选择错误!");
	}else{
   for(int i=L.n-1;i>=n-1;i--){
   	    L.ch[i+m]=L.ch[i];
   } 
   for(int i=0;i<m;i++){
        L.ch[n+i-1]=ch2[i];
    }    
    L.n=L.n+m;
    printf("将ch2插在L.ch的第%d个位置之后构成的字符串为:",n);
    for(int i=0;i<L.n;i++){
        printf("%c",L.ch[i]);
    }}
    printf("
");
}

void Find (SeqString &L,char ch3[]){
    int n=0,i,j,k,m=0;
    while(ch3[n]!=''){
        n++; 
    }
    for(i=0;i<L.n-n;i++){
       for(j=0,k=i;j<n;j++,k++){
          if(ch3[j]!=L.ch[k]){
          break;
        }}         
		if(j==n){
        printf("ch3字符串是从L.ch字符串中的第%d位置到第%d的位置
",i+1,i+n); 
		m++; 
		}  
    }
    printf("字符串ch3在L.ch字符串中总共有%d处相同!
",m);
     return;
   } 

int main(){
    int i,n,m,a,b,k;
    char ch1[5],ch2[]="abdef",ch3[4]="ab";
    SeqString L;
    printf("请输入一个长度最大为5的字符串:"); 
    gets(ch1);
    Assign(L,ch1);
    DisqStr(L);
    Strlength(L);
    i=Length(ch2);
    StrEqual(L,ch2,i);
    printf("请问要查找第几个位置开始的第几个字符:");
    scanf("%d %d",&n,&m);
    InsStr(L,n,m); 
    printf("请问要在第几个位置插入字符串ch2:");
    scanf("%d",&k);
    InStr(L,k,i,ch2);
    printf("查找字符串ch3在L.ch字符串中的位置:
");
    Find(L,ch3); 
    printf("请问要删除第几个位置开始的几个字符:");
    scanf("%d %d",&a,&b);
    DelStr(L,a,b);
    return 0;
}
 

 

  


 

原文地址:https://www.cnblogs.com/lusilin/p/10859709.html