您的位置:首页 > 其它

POJ 3753 根据关键字进行字符串拷贝

2013-05-20 22:25 197 查看
[b]根据关键字进行字符串拷贝[/b]

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 4633Accepted: 1021
Description

把源字符串拷贝到目的字符串,如果指定关键字,则以该关键字结束(不包括关键字本身),如果拷贝失败,则得到空串。
具体要求:实现如下函数原型SafeStrcpy2KeyWord(),并在代码中调用该函数实现上述功能。该函数的实现要考虑各种可能的参数取值,以确保程序不出现崩溃。

int SafeStrcpy2KeyWord(char* pDestBuffer,	//拷贝的目的地地址
char* pSourceString,	//拷贝的源地址
int nDestBufferSize,	//拷贝的目的地缓冲区长度
char* szKeyWord);	//指定关键字符串

返回值:所拷贝的字符串长度。如果拷贝失败,则返回0。
Input

输入包含多组数据,以EOF结束
每组数据第一行为不含空格的源字符串,长度小于256;接下来的一行或多行都是关键字串(长度小于16),一直到END结束。“NULL”表示关键字串为空,此时输出的拷贝后的长度应为0,拷贝后的字符串为空串(也用”NULL”表示,见下文)。
Output

对于每组数据输出拷贝的长度和拷贝后的目的字符串,以空格分隔。如果该目的字符串为空,则用”NULL”表示。
Sample Input

/home/tony/work_server/1/rtest/relayer.out
/
/t
/1/r
.
NULL
END

Sample Output

0 NULL
5 /home
22 /home/tony/work_server
38 /home/tony/work_server/1/rtest/relayer
0 NULL

哎,最近总刷水题……
又忘了有多钟测试数据,要用while(scanf());
以后把所有的都写成这样吧,被坑好多次了T^T
这道题要注意的就是,如果关键字是"NULL",则输出"0 NULL";如果关键字在source串中没有,则输出源字符串;如果还有,那就是……有多组测试数据……


#include<stdio.h>
#include<string.h>

int main()
{
int i,j,t,m,source_len,key_len;
char source[300],dest[300],key[300];

while(scanf("%s",source)==1)
{
getchar();
source_len=strlen(source);
while(1)
{
gets(key);

if(!strcmp(key,"END"))
break;
else if(!strcmp(key,"NULL"))
printf("0 NULL\n");
else
{
key_len=strlen(key);
for(i=0,t=source_len-key_len;i<=t;i++)
{
if(strncmp(&source[i],key,key_len))
dest[i]=source[i];
else
{
dest[i]='\0';
break;
}
}
if(i>t)
for(;i<=source_len;i++)
dest[i]=source[i];
if((t=strlen(dest)))
printf("%d %s\n",t,dest);
else
printf("0 NULL\n");
}
}
}

return 0;
}


[C]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: