数据结构病毒感染测试-(C语言版+BF匹配算法)

cs 复制代码
#define MAXSIZE 255
typedef struct
{
	char ch[MAXSIZE + 1];
	int length;
}SString;
typedef struct
{
	char result[MAXSIZE + 1];
}Detection;
int Index_BF(SString Person, SString temp)
{
	int i = 0, j = 0;
	while (i<Person.length && j<temp.length)
	{
		if (Person.ch[i] == temp.ch[j])
		{
			i++;
			j++;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
	}
	if (j >= temp.length)
	{
		return 1;
	}
	else {
		return 0;
	}
}
void Virus_detection(SString S[], SString T[], int num, Detection detection[])
{
	SString Person, Virus, temp;
	int k = 0, i, j, flag, m;
	while (num--)
	{
		Person = S[k];
		Virus = T[k];
		flag = 0;
		m = Virus.length;
		//把病毒DNA扩大两倍
		for (i = m,j = 0; j < m; j++)
		{
			Virus.ch[i++] = Virus.ch[j];
		}
		//处理病毒与人体dna
		Virus.ch[2 * m] = '\0';
		for (i = 0; i < m; i++)
		{
			for (j = 0; j < m; j++)
			{
				temp.ch[j] = Virus.ch[i + j];
			}
			temp.ch[m] = '\0';
			temp.length = m;
			flag = Index_BF(Person, temp);
			if (flag == 1)
			{
				break;
			}
		}
		if (flag == 1)
		{
			strcpy(detection[k].result, "YES");
		}
		else {
			strcpy(detection[k].result, "NO");
		}
		k++;
	}
}
int main()
{
	Detection detection[10];
	SString S[10] =
	{
		{"bbaabbba",8},
		{"aaabbbba",8},
		{"abceaabb",8},
		{"abaabcea",8},
		{"cdabbbab",8},
		{"cabbbbab",8},
		{"bcdedbda",8},
		{"bdedbcda",8},
		{"cdcdcdec",8},
		{"cdccdcce",8}
	};
	SString T[10] =
	{
		{"baa"  ,3},
		{"baa"  ,3},
		{"aabb" ,4},
		{"aabb" ,4},
		{"abcd" ,4},
		{"abcd" ,4},
		{"abcde",5},
		{"acc"  ,3},
		{"cde"  ,3},
		{"cced" ,4}
	};
	int num = 10, i;
	Virus_detection(S, T, num, detection);
	printf("病毒\t人体DNA\t   结果\n");	
	for (i = 0; i < num; i++)
	{
		printf("%s  \t%s    %s\n", T[i].ch, S[i].ch, detection[i].result);	
	}
	return 0;
} 

2.下面是可以访问文本文件读取文件内容,然后判断完YES 或 NO后再生成的一个新的结果文本文件代码

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char ch[600];
    int len;
} HString;

int Index_BF(HString S, HString T, int pos) {
    int i = pos, j = 1;
    while (i <= S.len && j <= T.len) {
        if (S.ch[i] == T.ch[j]) {
            i++;
            j++;
        } else {
            i = i - j + 2;
            j = 1;
        }
    }
    if (j > T.len) {
        return i - T.len;
    } else {
        return 0;
    }
}

void Virus_detection() {
    int num, m, flag, i, j;
    char Vir[600];
    HString Virus, Person, temp;
    FILE *inFile = fopen("病毒感染检测输入数据.txt", "r");
    FILE *outFile = fopen("病毒感染检测输出结果.txt", "w");
    if (inFile == NULL || outFile == NULL) {
        printf("Error opening files\n");
        return;
    }
    fscanf(inFile, "%d", &num);
    while (num--) {
        fscanf(inFile, "%s", Virus.ch + 1);
        fscanf(inFile, "%s", Person.ch + 1);
        strcpy(Vir, Virus.ch);
        Virus.len = strlen(Virus.ch) - 1;
        Person.len = strlen(Person.ch) - 1;
        flag = 0;
        m = Virus.len;
        for (i = m + 1, j = 1; j <= m; j++) {
            Virus.ch[i++] = Virus.ch[j];
        }
        Virus.ch[2 * m + 1] = '\0';
        for (i = 0; i < m; i++) {
            for (j = 1; j <= m; j++) {
                temp.ch[j] = Virus.ch[i + j];
            }
            temp.ch[m + 1] = '\0';
            temp.len = strlen(temp.ch) - 1;
            flag = Index_BF(Person, temp, 1);
            if (flag) {
                break;
            }
        }
        if (flag) {
            fprintf(outFile, "%s\t%s\tYES\n", Vir + 1, Person.ch + 1);
        } else {
            fprintf(outFile, "%s\t%s\tNO\n", Vir + 1, Person.ch + 1);
        }
    }
    fclose(inFile);
    fclose(outFile);
}

int main() {
    Virus_detection();
    return 0;
}

其中病毒感染检测输入数据的内容如下:

cs 复制代码
11
baa	bbaabbba 
baa	aaabbbba
aabb	abceaabb
aabb	abaabcea
abcd	cdabbbab
abcd	cabbbbab
abcde	bcdedbda
acc	bdedbcda
cde	cdcdcdec
cced	cdccdcce
bcd     aabccdxdxbxa

读者可以自行创建笔记本,将该笔记本放在自己目标代码的目录下,即可

相关推荐
土豆.exe11 小时前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法
黄河123长江11 小时前
有限Abel群的结构()
算法
阿米亚波12 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
Jerry12 小时前
LeetCode 92. 反转链表 II
算法
骊城英雄12 小时前
Rust从入门到精通-trait
人工智能·算法·rust
caishenzhibiao12 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
可编程芯片开发13 小时前
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
算法
怕浪猫13 小时前
2840亿参数只卖白菜价:DeepSeek V4 Flash 正式版上线,Agent 能力暴涨6倍
人工智能·算法
让学习成为一种生活方式13 小时前
苄基异喹啉生物碱糖基转移酶UGT74AN1晶体--Journal of Agricultural and Food Chemistry
人工智能·算法
alphaTao13 小时前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode