[坑]10115 Automatic Editing
这题简直让我崩溃了,拖了一个月,想把他AC了,还是未成功.
这题关键的地方是自己写个replace函数,我自己在志勇strlen的情况下,写了很久也没写出来.各种纠结.
直接找了份源码抄过来,ok,sample input输出没问题,但我交上去就是如下一幅场景.

我一开始是以为超时...(抽了- -) 检查结束条件,没问题..
又搜索runtime error的原因,有说数组开大了.
于是我把find从[10][80]开到[20][200]
把xx从[255]开到[1000]
尼玛还是runtime error.................实在不想卡这题了.
仍这里了吧.
注:ReplaceStr是转载的 = =
//31 Aug 2011
//这题有点恶心的是,要处理的字符串在最后,不得不读完一组数据再处理.
#include<stdio.h>
#include<string.h>
int ReplaceStr(char *sSrc, char *sMatchStr, char *sReplaceStr)
{
int StringLen;
char caNewString[1000];
char *FindPos = strstr(sSrc, sMatchStr);
if( (!FindPos) || (!sMatchStr) )
return -1;
while( FindPos )
{
memset(caNewString, 0, sizeof(caNewString));
StringLen = FindPos - sSrc;
strncpy(caNewString, sSrc, StringLen);
strcat(caNewString, sReplaceStr);
strcat(caNewString, FindPos + strlen(sMatchStr));
strcpy(sSrc, caNewString);
FindPos = strstr(sSrc, sMatchStr);
}
return 0;
}
int main()
{
#ifdef LOCAL
freopen("input.txt", "r", stdin);
#endif
int i, n;
char *buf, find[20][200], rep[20][200], str[1000];
while((n = (int)(getchar() - 48)) != 0)
{
getchar();
for(i = 0; i < n; i++)
{
fgets(find[i], 200, stdin);
fgets(rep[i], 200, stdin);
//处理尾字符
find[i][strlen(find[i])-1] = '\0';
rep[i][strlen(rep[i])-1] = '\0';
}
memset(str, '\0', 1000);
fgets(str, 1000, stdin);
for(i = 0; i < n; i++) //字符串替换
{
buf = str;
while((buf = strstr(buf, find[i])) != NULL)//进行替换
{
ReplaceStr(buf, find[i], rep[i]);
buf += strlen(rep[i]) - strlen(find[i]);
}
}
printf("%s", str);
}
return 0;
}
浙公网安备 33010602011771号