第1周编程题
依照学术诚信条款,我保证此作业是本人独立完成的。
温馨提示:
1.本次作业属于Online Judge题目,提交后由系统即时判分。
2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。
1字符串比对(10分)
题目内容:
题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。
注意,第一个字符的位置是0。
注意,第一个字符串在第二个字符串中的位置可能不止一处。
注意,字符串中可能含有空格。
注意,两个字符串的长度一定大于0。
输入格式:
两个字符串,一行一个。
输出格式:
第一个字符串在第二个字符串中出现的位置,按照从小到到的顺序排列,每个数字后面有一个空格。
如果在第二个字符串中找不到第一个字符串,则输出-1。
输入样例:
abba
ababbba abbabbabbabbaacc
输出样例:
8 11 14 17
时间限制:500ms内存限制:32000kb
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
char *a = (char*)malloc(10000*sizeof(char));
char *b= (char*)malloc(10000*sizeof(char));
int d=0 ; //记录a在b里出现的位置
int e=0;
char*c ; //c等于a在b里出现位置右侧的字符
// scanf("%s%[^\n]", a); // 输入a和b
// scanf("%s%[^\n]", b);
gets(a);
gets(b);//好像只能用gets才能实现输入带空格的字符串,用scanf我在网上搜了些方法均不行
c=b;
while(1)
{
c= strstr(c,a); //找到a在c中字符串右侧的字符
if(0==c)
{
break;
} //c等于a在b里出现位置右侧的字符
// printf("%s", c);
d=strlen(b)-strlen(c);//算出a在b里出现的位置。
c=c+1;
printf("%d ", d); //输出c的大小
e=1;//设置一个限制条件当a==b时,如果没有这个条件会输出0 0
}
if(e==0&&d==0)
{
d=-1;
printf("%d", d);
}
free(a);
free(b);
return 0;
}