数据结构病毒感染测试-(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

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

相关推荐
NAGNIP11 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱19 小时前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub1 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
祈安_1 天前
C语言内存函数
c语言·后端
NAGNIP1 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP1 天前
一文搞懂激活函数!
算法·面试