一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
#include<stdio.h>
#include<string.h>
int main()
{
char s1[1001],s2[1001];
int i,ans;
while(scanf("%s",&s1)&&s1[0]!='#'){
scanf("%s",&s2);
ans=0;
for(i=0;i<strlen(s1);i++){
if(strlen(s2)+i<=strlen(s1)){
if(strncmp(s1+i,s2,strlen(s2))==0){
ans++;
i+=strlen(s2)-1;
}
}
else{
break;
}
}
printf("%d\n",ans);
memset(s1,0,1001*sizeof(char));
memset(s2,0,1001*sizeof(char));
}
}
题解:strncmp函数:
判断数组a,b中n个元素是否相同。
strcmp(a+i,b+j,n)表示数组a的第i个元素,数组b的第j个元素开始的n个元素是否相同。
判断方法是用a数组的元素的ASCLL值减去b数组元素ASCLL的值,若比较的元素全部相同,返回值为0.