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;
    }
    
     
  • 相关阅读:
    react项目如何调试?
    react使用引入svg的icon;svg图形制作
    react使用echarts
    SQL SEVER数据库重建索引的方法
    ThreadLocal的内存泄露
    ThreadLocal是否会引发内存泄露的分析 good
    深入分析 ThreadLocal 内存泄漏问题
    清理ThreadLocal
    线程池 Threadlocal 使用注意
    ThreadLocal对象使用过程中容易陷入的坑
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14314958.html
Copyright © 2011-2022 走看看