字符串暴力匹配(纯C语言)

字符串暴力匹配

#include <stdio.h>
#include <stdlib.h>
//定义字符串结构体,包含一个字符指针,和长度方便遍历
typedef struct myString {
	char* data;
	int len;
}myString;
//初始化字符串
myString* initMyString() {
	myString* s = (myString*)malloc(sizeof(myString));
	s->data = NULL;
	s->len = 0;
	return s;
}
//赋值函数
void myStringAssign(myString* s, char* data) {
//尚不太清楚这一步的作用
	if (s->data) {
		free(s->data);
		s->data = NULL;
	}
		char* temp = data;
		int len = 0;
		while (*temp) {
			len++;
			temp++;
		}
		s->len = len;
		temp = data;
		s->data = (char*)malloc(sizeof(char)*(len + 1));
		for (int i = 0; i < len; i++) {
			s->data[i] = *temp;
			temp++;
		}
}
//遍历打印函数
void printMyString(myString* s) {
	for (int i = 0; i < s->len; i++) {
		printf("%c ", s->data[i]);
	}
	printf("\n");
}
//暴力匹配函数,关键是匹配失败后主串字符数组下标i的回退
void myStringForceMatch(myString* master, myString* sub) {
	int i = 0;
	int j = 0;
	while (i < master->len&&j < sub->len) {
		if (master->data[i] == sub->data[j]) {
			i++;
			j++;
			if (j == sub->len) {
				printf("success\n");
			}
		}
		else {
			i = i - j + 1;
			j = 0;
		}
	}
	if (j != sub->len) {
		printf("fail\n");
	}
}
//测试函数
void test() {
	myString* master = initMyString();
	myString* sub1 = initMyString();
	myString* sub2 = initMyString();
	myStringAssign(master, "abcabd");
	printMyString(master);
	myStringAssign(sub1, "abd");
	printMyString(sub1);
	myStringAssign(sub2, "abe");
	printMyString(sub2);
	myStringForceMatch(master, sub1);
	myStringForceMatch(master, sub2);
}
int main() {
	test();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值