C语言编程练习13:字符串匹配
题目描述
给你一个字符串A和一个字符串B,请你计算字符串B的所有旋转形式在字符串A中的出现总次数。
说明:
如果将字符串B描述成B1B2...Bm的形式(m是B的长度),那么B1B2...Bm-1Bm,B2B3...BmB1,...,BmB1...Bm-2Bm-1就是字符串B的所有旋转形式。
说明:
如果将字符串B描述成B1B2...Bm的形式(m是B的长度),那么B1B2...Bm-1Bm,B2B3...BmB1,...,BmB1...Bm-2Bm-1就是字符串B的所有旋转形式。
输入
输入包含多组测试数据。每组输入为两行,第一行输入字符串A,第二行输入字符串B。A的长度不超过1000,B的长度不超过100,所有字符串仅包含小写字母。
输出
对于每组输入,输出字符串B的所有旋转形式在字符串A中的出现总次数。
样例输入 Copy
abab
ab
aaaa
a
aaaa
aa
样例输出 Copy
3
4
3
思路:我摊牌了。我是laji。这个题做的时候题都看不懂。网上百度知道的答案居然AC了。绝了,回头琢磨琢磨。
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
void change(char a[])
{
char t;
t=a[0];
int i;
for(i=0;a[i+1]!='\0';i++)
{
a[i]=a[i+1];
}
a[i]=t;
}
void Find(int i,int j,char a[],char b[])
{
int k,l;
for(k=i,l=0;k<i+j;k++,l++)
{
b[l]=a[k];
}
b[l]='\0';
}
int main()
{
char a[1001],b[101],c[101];
int i,j=0,k=0,n;
while(gets(a))
{
gets(b);
n=strlen(b);
j=0;
k=0;//每次要清内容
for(i=0;a[i+n-1]!='\0';i++)
{
Find(i,n,a,c);
while(strcmp(b,c)!=0)
{
change(b);
k++;
if(k>=n)
break;
}
if ( strcmp(b,c)==0 )
j++;
}
printf("%d\n",j);
}
return 0;
}

浙公网安备 33010602011771号