zoukankan      html  css  js  c++  java
  • 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]!='';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]='';
    }
    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]!='';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
    ",j);
        }
        return 0;
    }
    
     
  • 相关阅读:
    CSS 字体
    列表排列
    IE6 fixed 页面抖动
    HTML中css和js链接中的版本号(刷新缓存)
    CSS3 box-shadow
    CSS3的文字阴影—text-shadow
    [LeetCode][JavaScript]Add Digits
    [LeetCode][JavaScript]Max Points on a Line
    [LeetCode][JavaScript]Subsets II
    [LeetCode][JavaScript]Subsets
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14314958.html
Copyright © 2011-2022 走看看