CPP 1258 剪花布条

题目链接:剪花布条


题面:

剪花布条 
Time Limit:1000MS  Memory Limit:32768K

Description:

一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?

Input:

输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。

Output:

输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。

Sample Input:

abcde a3
aaaaaa  aa
#

Sample Output:

0
3


题意:  直接不断移动较短串进行匹配即可。


代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s,ss;
	int count=0;
	while(cin>>s&&s!="#")
	{
		count=0;
		cin>>ss;
		int len1=s.length(),len2=ss.length();//预先取它们的长度提高效率 
		int dif=len1-len2;//它们长度差,也就是移动ss能到的最后一个位置的下标 
		bool flag=true;//判断一回匹配是否成功的标志 
		for(int i=0;i<=dif;)//不断移动子串进行匹配 
		{
			flag=true;
			for(int j=0;j<len2;j++)//在当前位置匹配ss 
			{
				if(ss[j]!=s[i+j])//一旦发现不匹配,就直接停止,并将标记置为假 
				{
					flag=false;
					break;
				}
			}
			if(flag)//如果匹配成功,就后移ss的长度 
			{
				count++;
				i+=len2;
			}
			else//未匹配成功,后移1位 
			i++;
		}
		cout<<count<<endl;
	}
	return 0;
}


你可能感兴趣的:(字符串,入门,cpp,最水题)