数据结构-串-模式匹配(暴力)

注:本文采用的暴力枚举的方法,也可以采用KMP算法见另文 

Description
建立字符串的定长存储结构,输入两个字符串s、t,判断t是否包含在s里面。
(可以考虑用KMP算法实现)
Input

多组输入,每次输入两个字符串。

Output

若果匹配成功输出t在s中出现的起始位置,否则输出0。

说明:输出有换行

Sample Input
ABCDEFG
DEF
ABCDEFG
EEE
 
Sample Output
4

0

#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
#define Max_str 255
using namespace std;

typedef struct{
    char *ch;
    int length;
}Hstring;

void initString(Hstring &S){
	S.ch=new char[Max_str];
    S.length=Max_str;
    for(int i=0;i<S.length;i++){
        S.ch[i]='\0';
    }
}
void Strass(Hstring &S,char *chars){
    int i=0;
    char *c;
    for(i=0,c=chars;*c;i++,c++);
    for(int j=0;j<i;j++){
        S.ch[j]=chars[j];
    }
    S.length=i;
}
void Strprint(Hstring S){//输出字符串S
    for(int i=0;i<S.length;i++){
        cout<<S.ch[i];
    }
}
int index_BF(Hstring S,Hstring T,int pos){//字符串匹配(暴力)
    //S为主串,T为子串,pos为开始位置
    int i=pos,j=0;
    while(i<S.length&&j<T.length){
        if(S.ch[i]==T.ch[j]){
            i++;
            j++;
        }
        else{
            i=i-j+1;
            j=0;
        }
    }
    if(j>=T.length-1){
        return i-T.length+1;
    }
    else{
        return 0;
    }
}

int main(){
    int pos=0;
    Hstring S,T;
    initString(S);
    initString(T);
    char chars[Max_str];
    char chars1[Max_str];
    while(cin>>chars){
        Strass(S,chars);
        //cout<<S.length;
        //Strprint(S);
        cin>>chars1;
        Strass(T,chars1);
        //cout<<T.length;
        //Strprint(T);
        cout<<index_BF(S,T,pos)<<"\n";
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值