天天看點

C語言資料結構字元串的模式比對-BF算法

#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;
}





           

繼續閱讀