首页 > 代码库 > Automatic Editing UVA 10115
Automatic Editing UVA 10115
#include <stdio.h> #include <string.h> #define MAXL 225+5 #define MAXN 10+5 char find[MAXN][MAXL],replace[MAXN][MAXL]; char text[MAXL],convert[MAXL]; int Find(int,int*); void Replace(int,int); int str_cmp(int,int); int main(){ int N,i,j,k; int p; freopen("data","r",stdin); while(scanf("%d\n",&N)&&N){ for(i=0;i<N;i++){ gets(find[i]); gets(replace[i]); } gets(text); for(i=0;i<N;i++) while(Find(i,&p)) //反复查找find,知道text中不存在 Replace(i,p); //用replace替代找到的find printf("%s\n",text); } return 0; } int Find(int i,int* p){ int j; for(j=0;j<strlen(text);j++) //查找text中是否有子串find,有则返回初始位置 if(str_cmp(i,j)){ *p=j; return 1; } return 0; } int str_cmp(int i,int j){ //比较函数 int len=strlen(find[i]); int k; for(k=0;k<len;k++) if(find[i][k]!=text[j+k]) return 0; return 1; } void Replace(int i,int p){ int k,j; for(k=0;k<p;k++)//将find子串前的text中的字符放入暂存数组convert convert[k]=text[k]; for(j=0;j<strlen(replace[i]);j++,k++)//接着将对应的replace放入 convert[k]=replace[i][j]; for(j=p+strlen(find[i]);j<=strlen(text);j++,k++)//放入text中find之后的字符 convert[k]=text[j];//注意要将最后的'\0'也放入 for(k=0;k<=strlen(convert);k++)//最后将convert复制回text,注意'\0' text[k]=convert[k]; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。