UVa 10115 - Automatic Editing

大体题意就是将列表第一列的字符串不断换成第二列的字符串,直到将所给的整个句子中所有出现的第一列字符串全部换掉为止,然后再进行下一个字符串的替换。题目本身不难,相信只要认真一点,就可以轻松AC掉 ~

(如果用上strstr()函数和sprintf函数会使代码简洁不少,效率也会提高不少。当然如果会用STL的string的话,同样会很快。)

代码如下:

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
#ifdef sta
    freopen("sample.text","r",stdin);
#endif
    int k,i;
    char *ffct;            //   定义一个字符指针
    char sum[20+1][80+1],a[260],b[260],c[260];
    while(scanf("%d",&k))
    {
        getchar();
        if(k==0)
            break;
        memset(sum,0,sizeof(sum));
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(i=0; i<=2*k-1; i++)
            gets(sum[i]);
        gets(a);
        for(i=0; i<=2*k-1; i=i+2)
            while(1)
            {
                ffct=strstr(a,sum[i]);    //找到要替换的字符串出现的地方
                if(ffct==NULL)
                    break;
                sprintf(c,"%s",ffct+strlen(sum[i]));    //将要替换部分后边的字符串暂存到c数组里
                sprintf(ffct,"%s",sum[i+1]);            //将要替换的部分进行替换(将要替换后边的字符串也覆盖掉了)
                sprintf(ffct+strlen(sum[i+1]),"%s",c);//将暂存的字符串补上
            }
        printf("%s\n",a);
    }
    return 0;
}


你可能感兴趣的:(c,String,null)