【数据结构与算法】暴力匹配子串-C语言版

/*
Created by justin on 2/3/24.
Contact me by gejianming@buaa.edu.cn
*/
#include "stdio.h"
#include "stdlib.h"
#include<string.h>

typedef struct String {
   
    char *data;
    int len;
} String;

String *initString() {
   
    String *s = (String *) malloc(sizeof(String));
    s->data = NULL;
    s->len = 0;
    return s;
}

void stringAssign(String *s, char * data) {
   
    if (s->data) {
   
        // 防止出现脏数据
        free(s->data);
    }
    s->len = strlen(data);
    s->data = (char *) malloc((s->len + 1) * sizeof(char));//为字符串分配内存
    strcpy(s->data, data);
}

void printString(String *s) {
   
    for (int i = 0; i < s->len; ++i) {
   
        printf(i == 0 ? "%c" : "->%c", s->data[i]);
    }
    printf("\n");
}

void forceMatch(String *master, String *sub) {
   
    int i = 0, j = 0;
    while (i < master->len && j < sub->len) {
   
        if (master->data[i] == sub->data[j]) {
   
            i++;
            j++;
        } else {
   
            i = i - j + 1;
            j = 0;
        }
    }
    if (j == sub->len) {
   
        printf("force match success. \n");
    } else {
   
        printf("force match fail.\n");
    }
}

int main(int argc, char *argv[]) {
   
    String *s = initString();
    String *s1 = initString();
    stringAssign(s, argv[1]);
    stringAssign(s1, argv[2]);
    printString(s);
    printString(s1);
    forceMatch(s, s1);
}

暴力匹配子串,

justin@DESKTOP-NIK28BI:~/data_struct_c$ ./ForceMatch ABCDEF  A
A->B->C->D->E->F
A
force match success. 


justin@DESKTOP-NIK28BI:~/data_struct_c$ ./ForceMatch ABCDEF  AE
A->B->C->D->E->F
A->E
force match fail.

这个写法还是很炫的

printf(i == 0 ? "%c" : "->%c", s->data[i]);

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 18:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 18:08:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 18:08:02       82 阅读
  4. Python语言-面向对象

    2024-02-05 18:08:02       91 阅读

热门阅读

  1. Linux常见面试题汇总

    2024-02-05 18:08:02       52 阅读
  2. easyexcel解析跨多行的数据

    2024-02-05 18:08:02       55 阅读
  3. 游戏行业需要高防护服务器的理由有哪些?

    2024-02-05 18:08:02       50 阅读
  4. pta 计算火车运行时间

    2024-02-05 18:08:02       45 阅读
  5. MATH122 Math

    2024-02-05 18:08:02       50 阅读
  6. Android13 系统源码适配安装可卸载的三方apk应用

    2024-02-05 18:08:02       39 阅读