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

根据关键字进行字符串拷贝
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 4633   Accepted: 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串中没有,则输出源字符串;如果还有,那就是……有多组测试数据……

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     int i,j,t,m,source_len,key_len;
 7     char source[300],dest[300],key[300];
 8 
 9 
10 
11     while(scanf("%s",source)==1)
12     {
13         getchar();
14         source_len=strlen(source);
15         while(1)
16         {
17             gets(key);
18 
19             if(!strcmp(key,"END"))
20                 break;
21             else if(!strcmp(key,"NULL"))
22                 printf("0 NULL\n");
23             else
24             {
25                 key_len=strlen(key);
26                 for(i=0,t=source_len-key_len;i<=t;i++)
27                 {
28                     if(strncmp(&source[i],key,key_len))
29                         dest[i]=source[i];
30                     else
31                     {
32                         dest[i]='\0';
33                         break;
34                     }
35                 }
36                 if(i>t)
37                     for(;i<=source_len;i++)
38                         dest[i]=source[i];
39                 if((t=strlen(dest)))
40                     printf("%d %s\n",t,dest);
41                 else
42                     printf("0 NULL\n");
43             }
44         }
45     }
46 
47     return 0;
48 }
[C]

 

posted @ 2013-05-20 22:25  ~~Snail~~  阅读(246)  评论(0编辑  收藏  举报