C语言编程练习13:字符串匹配

题目描述

给你一个字符串A和一个字符串B,请你计算字符串B的所有旋转形式在字符串A中的出现总次数。
说明:
如果将字符串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;
}

 

 
posted @ 2021-01-22 19:38  FantasticDoulbeFish  阅读(538)  评论(0编辑  收藏  举报