poj 1572 Automatic Editing 字符串

来源:互联网 发布:中信证券软件使用方法 编辑:程序博客网 时间:2024/05/16 03:54
/*很简单一题,但是因为英语不好,没过(老是超时)*/#include<stdio.h>#include<string.h>struct node{char s1[100],s2[100];}q[11];char s[300];void cao(char *p,int i)//原先用string.h中的函数,老超时,就自己操作了,还是超时,就没改回去{int len1=strlen(q[i].s1),len2=strlen(q[i].s2),len=strlen(s);int k=len2-len1;char *pp=&s[len];if(k>0){while(pp>=(p+len1)){*(pp+k)=*pp;pp--;}}else if(k<0){k=-k;pp=p+len1;while(1){*(pp-k)=*pp;if(!*pp)break;pp++;}}pp=q[i].s2;while(*pp){*p=*pp;p++;pp++;}}void ha(int n){int i;char *p;while(1){for(i=0;i<n;i++){p=strstr(s,q[i].s1);if(p){cao(p,i);i--;//原先以为每次替换后都要从第一组开始匹配,这行原来是break;//后来发现上图(他的意思是:轮到哪组时,一直找这组,知道再也发现不了,轮到下一组),改为现状}}if(i!=n)continue;return;}}int main(){int n,i;while(scanf("%d",&n),n){getchar();for(i=0;i<n;i++){gets(q[i].s1);gets(q[i].s2);}gets(s);ha(n);puts(s);}return 0;}

原创粉丝点击