浙大C语言进阶第一周编程题

第一周编程题

字符串比对(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");
	}
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霖承科技 LinChance

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值