bf算法的自己思考

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 100

typedef struct 
{
char *p;
int length;    
}sstring;

void getsstring(sstring &s)//这个输入函数的书写针对一个函数时还可以。不可以两个函数 ,针对字符数组出错了,不知道为什么 
//z这种用for循环语句来输入不知道哪里出错,看一下一下子输入; 
//利用定义一个变量利用strcpy函数的方法失败了,失败原因从char到char*的转变无效; 
{
    int i;
    int n;
    char cc;
    s.p=(char *)malloc(sizeof(char)*100);
    if(!s.p)
    {
    printf("分配空间失败\n");
    exit (0);
}
//    printf("请输入字符数组的长度\n");
//    scanf("%d",&s.length);    
//    printf("请输入%d个字符\n",s.length);
//    for(i=0;i<s.length;i++)
//    scanf("%c",&s.p[i]);

//printf("请输入字符数组s的值");//这种方法是错误的 
// scanf("%s",&cc);
//strcpy(s.p,cc);

printf("请输入字符数组的值");//要求必须length已知,这种方法虽然输入可以,但是长度未知 
gets(s.p);
  }  
  
  
  
int index(sstring s,sstring t,int pos)//要求必须length已知 
{
    int i,j;
    i=0;j=0;
    t.length=strlen(t.p);
    s.length=strlen(s.p);
    while(i<=s.length-1&&j<=t.length-1)//并且 
    {
    if(s.p[i]==t.p[j])
    {
        ++i;++j;
    }
    else
    {
    i=i-j+2;j=0;}
    
    }
    if(j>t.length-1)
    {
    return i-t.length+1;}
    else 
    {
    return -1;}

  }  
  
  
int main()
{
    int n;
    int jj;
    int pos;
    sstring c;
    sstring t;
    pos=0;
    printf("请输入c的字符\n");
    getsstring(c);
    printf("\n");
    printf("请输入t的字符\n");
    getsstring(t);
    jj=index(c,t,pos);
    printf("这是bf算法得到的值\n");
    printf("%d",jj);
    return 0;
}

### 关于BF算法的C语言实现 BF(Brute Force)算法是一种简单的字符串模式匹配算法。其基本思想是从目标串 `S` 的第一个字符起与模式串 `T` 进行逐个比较,如果发生不匹配,则将模式串向右移动一位继续比较;直到找到完全匹配为止或者遍历整个目标串结束。 以下是基于BF算法的C语言实现: ```c #include <stdio.h> #include <string.h> int BF(char S[], char T[]) { int i = 0, j = 0; while (i < strlen(S) && j < strlen(T)) { // 遍历主串和模式串 if (S[i] == T[j]) { // 如果当前字符相等 i++; j++; // 同时增加索引 } else { // 发生失配 i = i - j + 1; // 主串回溯到上次开始位置的下一个字符 j = 0; // 模式串重新从头开始匹配 } } if (j >= strlen(T)) { // 若成功匹配完成模式串 return i - strlen(T); // 返回首次匹配的位置 } else { // 若未匹配完成 return -1; // 表示无匹配项 } } int main() { char S[] = "ababcabcacbab"; // 目标串 char T[] = "abcac"; // 模式串 int pos = BF(S, T); if (pos != -1) { printf("Pattern found at index %d\n", pos); } else { printf("Pattern not found\n"); } return 0; } ``` 上述代码实现了BF算法的核心逻辑[^4]。通过逐步对比目标串中的每一个可能子串来寻找完整的模式串匹配情况。 #### 复杂度分析 - **时间复杂度**: 在最坏情况下为 \(O(m \times n)\),其中 \(m\) 是目标串长度,\(n\) 是模式串长度。 - **空间复杂度**: 只需常量额外存储空间,因此为 \(O(1)\)[^5]。 ### 性能改进思考 尽管简单易懂,但当遇到大量重复数据或较长的目标串时,效率较低。可以考虑更高效的算法如KMP、BM等作为替代方案[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在变秃的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值