字符串的基本操作

//
//  main.cpp
//  字符串
//
//  Created by 孙贤超 on 2019/5/18.
//  Copyright © 2019 孙贤超. All rights reserved.
//
#include<stdio.h>
#define maxsize 100
typedef struct{
    char ch[maxsize];
    int n;
}SeqString;
void Assign(SeqString &L,char ch1[]);
void DisqStr(SeqString &L);
void Strlength(SeqString &L);
int  concat(SeqString &L,char ch2[]);
void StrEqual(SeqString &L,char ch2[],int i);
void InsStr(SeqString &L,int n,int m);
void DelStr(SeqString &L,int n,int m);
void InStr(SeqString &L,int n,int m,char ch2[]);
void Find (SeqString &L,char ch3[]);

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


void Assign(SeqString &L,char ch1[]){           //  数组赋值给字符串
    int i=0;
    while(ch1[i]!='\0'){
        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("\n");
}

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

int  concat(SeqString &L,char ch2[]){            //串连接
    int i=0,j;
    while(ch2[i]!='\0'){
        i++;
    }
    for(j=0;j<i;j++){
        L.ch[j+L.n]=ch2[j];
    }
    printf("将串ch2连接到L.ch后面,得到的新的字符串为:\n%s\n",L.ch);
    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->1,L.ch=ch2->0,L.ch<ch2->-1)\n结果为:");
    for(int j=0;j<a;j++){
        if(L.ch[j]==ch2[j]){
            k++;
        }else if(L.ch[j]>ch2[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.ch字符串第%d个位置开始的%d个字符为:\n",n,m);
    for(i=n-1;i<n+m-1;i++){
        printf("%c",L.ch[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.ch[i-1]=L.ch[i+m-1];
    }
    printf("删除第%d个位置的%d个字符之后组成新的字符串为:\n",n,m);
    for(i=0;i<L.n;i++){
        printf("%c",L.ch[i]);
    }
}

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

void Find (SeqString &L,char ch3[]){
    int n=0,i,j,k;
    while(ch3[n]!='\0'){
        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的位置\n",i+1,i+n);
        }
    }
    return;
}

 

posted @ 2019-05-18 13:53  孙贤超  阅读(291)  评论(0编辑  收藏  举报