第一周编程题 字符串比对(10分)

第一周编程题

字符串比对(10分)

题目内容:

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

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

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

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

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

输入格式:

两个字符串,一行一个。

输出格式:

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

输入样例:

abba
ababbba abbabbabbabbaacc

输出样例:

8 11 14 17
时间限制:500ms内存限制:32000kb

思路:

这题考字符串主要,还有一些细节(开头是空格),用-1表示状态 详细看代码注释

#include<stdio.h>
#include<string.h>//strlen要用的函数。
char s1[10050];
char s2[10050];
int ans[10050];
int main()
{
	//两个字符串,都小于10000,第一个小于第二个,第一个在第二个种出现的位置
	gets(s1);
	gets(s2);
//	printf("%s\n",s1);
//	printf("%s\n",s2);
	for(int i=0;i<10050;i++)
	{
		ans[i]=-1;//这里赋值为-1是因为后面好方便操作,-1代表状态不是相同的起始点,是相同的起始点我在后面进行了赋值,为什么不赋值为0呢是因为数组开头下标是0,后面出现错误,用例1,2,4都是空头为0的样例。
	}
	int len=strlen(s1);
	//printf("len=%d ",len);
	//ans[]={-1};
	for(int i=0;i<strlen(s2);i++)
	{
		if(s2[i]==s1[0])
		{
			int num=0;
			int sum=0;
			for(int j=i;j<i+len;j++)
			{
				//printf("%d\n",i);
				if(s2[j]==s1[num])
				{
					//printf("j=%d num=%d\n",j,num);
					sum++;
					num++;
				}else{
					break;
				}
			}
			if(sum==len)
			{
				ans[i]=i;
			}
		}
	}
	int k=0;
	for(int i=0;i<strlen(s2);i++)
	{
		if(ans[i]>=0)
		{
			printf("%d ",i);
			k++;
		}
	}
	if(k==0)
	{
		printf("-1");
	}
} 
posted @ 2020-04-21 21:20  Joker-Li  阅读(239)  评论(0)    收藏  举报