#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STRSIZE 255//字元串的最大長度
typedef char *StrType;//字元數字類型
typedef int Statu;//函數傳回值的資料類型
#define OK 1
#define ERROR 0
typedef struct string
{
StrType data;//定義字元串指針
int len;//字元串的長度
}String;//字元串的結構體資料類型
void Init_string(String* str);//對字元串的初始化
Statu create_string(String* str);//對字元串進行建立
int BF_fun(String *str,char *s,int pos);//字元串模式比對的算法
void main()
{
String *str;
char s[STRSIZE];
str=(String*)malloc(sizeof(String));//對指針進行動态賦存儲空間
//對字元串進行初始化
Init_string(str);
//對字元串進行建立
int result=creat_string(str);
if(result==ERROR)
{
printf("字元串建立失敗:\n");
}
else
{
printf("字元串建立成功:\n");
printf("對字元串的長度為%d及周遊的結果為:\n",str->len);
puts(str->data);
}
printf("請輸入進行模式比對的字元串:\n");
scanf("%s",s);
int pos=BF_fun(str,s,2);
if(pos==ERROR)
{
printf("字元串的比對失敗\n");
}
else
{
printf("字元串比對成功\n");
printf("字元串比對的位置為%d\n",pos);
}
}
void Init_string(String *str)//對字元串的初始化
{
if(str==NULL)
{
printf("字元串初始化失敗:\n");
return ;
}
else{
str->data=(StrType)malloc(sizeof(char)*STRSIZE);//建立字元串數組
str->len=-1;//指向字元串在字元串數組的下标
}
}
Statu creat_string(String *str)
{
if(str==NULL)
return ERROR;
//對字元串進行建立
char c;//字元變量
int i=0;
printf("請輸入字元:\n");
while(scanf("%c",&c)!=EOF)
{
if(c=='^')
break;//退出循環
else if(i+1==STRSIZE)
break;
else
{
str->data[i]=c;
str->len++;//将字元串字元進行加加
i++;
}
}
str->data[i]='\0';//字元串的結束标志
return OK;//字元串建立成功
}
int BF_fun(String *str,char *s,int pos)//字元串模式比對的算法
{
int i=pos-1;
int j=0;
int len=strlen(s);//字元串的長度
printf("字元串s的長度為%d",len);
while(i<str->len&&j<len)
{
if(str->data[i+j]==s[j])
{
j++;
}
else
{
i++;
j=0;
}
}
if(j==len)
return i+1;
else
return ERROR;
}