第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 }
独学而无友,则孤陋而寡闻。