嗜血魂K

导航

[坑]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;
}

posted on 2011-08-01 22:54  嗜血魂K  阅读(243)  评论(0)    收藏  举报