C语言程序设计进阶 第1周编程题

第1周编程题

查看帮助

返回

 

 

 

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1

字符串比对(10分)

题目内容:

题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。

 

注意,第一个字符的位置是0。

 

注意,第一个字符串在第二个字符串中的位置可能不止一处。

 

注意,字符串中可能含有空格。

 

注意,两个字符串的长度一定大于0。

 

输入格式:

两个字符串,一行一个。

 

输出格式:

第一个字符串在第二个字符串中出现的位置,按照从小到到的顺序排列,每个数字后面有一个空格。

如果在第二个字符串中找不到第一个字符串,则输出-1。

 

输入样例:

abba

ababbba abbabbabbabbaacc

 

输出样例:

8 11 14 17

时间限制:500ms内存限制:32000kb

 1 //
 2 //  main.c
 3 //  CC
 4 //
 5 //  Created by anzhongyin on 2016/12/10.
 6 //  Copyright © 2016年 anzhongyin. All rights reserved.
 7 //
 8 
 9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 int main(int argc, const char * argv[]) {
13     // insert code here...
14     char c;
15     int i=0;
16     char str[1000]={'\0'}; //大字符串
17     char dest[100]={'\0'}; //子字符串
18     char *q=0;
19     char *p=0;
20     int b=1; //BOOL,b=0,第二个字符串中找到第一个字符串,否则为1
21     while((c=getchar())!='\n') //读入子字符串
22     {
23         dest[i]=c;
24         i++;
25         
26         
27     }
28      i=0;
29     while((c=getchar())!='\n')//读入长字符串
30     {
31         str[i]=c;
32         i++;
33         
34         
35     }
36    
37     p=str; //将&str[0]地址赋值p
38     
39     while((q=strstr(p,dest))!=NULL) //将大字符串中小字符串的起始位地址赋给q
40     {
41         char a=*q;  //将*q的值赋给a,以便还原
42         *q='\0';    //大字符串中首次出现小字符的位置,写入0,作str字符串的结束位置
43         printf("%lu ",strlen(str));//统计的str长度即dest首次出现位置
44         *q=a; //还原字符串
45         p=q+1;//将str字符串q址址的下一地址作为p字符串开始位置
46         if(b==1)
47             b=0; //b=0,第二个字符串中找到第一个字符串
48     }
49     if(b)
50         printf("-1");
51     printf("\n");
52     
53     return 0;
54 }

 

posted @ 2016-12-11 01:14  峰圣榜  阅读(2494)  评论(0编辑  收藏  举报