您的位置:首页 > 其它

刚哥遇到了感情问题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 上一集我们讲到 作为工作室老大的刚哥遇到很多女生的追求,你帮他个挑选了个英语成绩不错的对象。在你

2017-07-19 10:55 951 查看
# include <stdio.h>

# define N 201

char A[][7]={"apple","banana","orange"};  //A->B

char B[][5]={"miss","love","kiss"};

int S[]={4,5,5},num,D[2]
;

char C
;

int BF(char a[],char b[],int c[]);//返回b字符串在a中的个数 c存储b在a中的下标 从c[num]开始存储 num为全局变量

void change(int *a,int *b);//交换函数

void Qsort(int A[]
,int left,int right);//快速排序 升序

int main(){

    int i,j,k;

    //freopen("AAA.txt","r",stdin);

    while(gets(C)){

    for(i=j=num=0;i<3;i++)//用 A[i]匹配C 返回匹配的个数

    {

      k=BF(C,A[i],D[0]);//k记录A[i]匹配的个数

    while(k--)D[1][j++]=i;//D[1]用来存储i

    }

    Qsort(D,0,num-1);//以A[0]升序 从下标0---  num-1  一共num个

    for(i=j=0;C[i];i++){//输出

        if(i==D[0][j]&&j<num)

        {

            printf("%s",B[D[1][j]]);

            i+=S[D[1][j++]];

        }

        else printf("%c",C[i]);

    }

    printf("\n");//输出回车符

    }

    return 0;

}

int BF(char a[],char b[],int c[]){//返回b字符串在a中的个数 c存储b在a中的下标 从c[num]开始存储 num为全局变量

    int i=0,j=0,k=num;//k存储当前已经匹配的个数

    do{

        if (b[j]&&a[i++]==b[j])++j;//如果匹配成功 继续向下匹配

        else

        {

            b[j]?(i-=j):(c[num++]=i-j);//b字符串到头了吗?如果到头了即b[j]=0 此时 c存储匹配下标 否则i回溯

            j=0;//无论匹配成功与否  b都要重新和a检测

        }

    }while(a[i-1]);

    return num-k;//返回b在a中匹配的个数

}

void change(int *a,int *b){//交换函数 交换a b的值

   int c=*a;

   *a=*b;

   *b=c;

}

void Qsort(int A[]
,int left,int right)//不需要知道内部 只需要知道是升序就行了

{

    int i=left,j=right,temp=A[0][left];

    if(left>=right)  return;

    while(i!=j)

    {

        while(A[0][j]>=temp && i<j) j--;

        while(A[0][i]<=temp && i<j)i++;

        if(i<j)

        {

            change(&A[0][i],&A[0][j]);

            change(&A[1][i],&A[1][j]);

        }

}

    change(&A[0][left],&A[0][i]);

    change(&A[1][left],&A[1][i]);

    Qsort(A,left,i-1);

    Qsort(A,i+1,right);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐