数据结构第二版之(课后题)BF算法病毒感染检测
//vs2013下编译通过.换别的编译器自行补充头文件和修改源代码
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
char temp[256];//存放的临时数组
char virus[20];//病毒数组
char DNA[20];//DNA的数组
int j = 0;//病毒长度
int DNAlength = 0;//dna长度
int flag = 0;//判断是不是感染开关
void toCharArry(string str)//将读入的字符串转化为字符数组
{ j = 0;
int tem=0;
strcpy_s(temp, str.c_str());
//cout << str.length();
for (int i = 0; i < str.length(); i++)//找到空格的位置
{
if (temp[i] == ' '){ j=(i+1); break; }
}
tem = j;
for (int i = 0; i < str.length() - j + 1;i++)//写入DNA数组;
{
DNA[i] = temp[tem];
if (i == str.length() - j){
DNA[i] = '\0';//到底用不用加\我也不知道
}
tem++;
}
for (int i = 0; i < j; i++)//得到病毒序列
{
virus[i] = temp[i];
} /*for (int i = 0; i <9; i++)//输出Dna序列
{
cout <<DNA[i];
}
cout << endl; for (int i = 0; i < j; i++)//输出病毒序列
{
cout << virus[i];
}
cout << endl;
cout << j;*/
}
void addvVirusToDouble(char virus[])//将病毒序列扩大为原来二倍
{
int k = j-1;
for (int i = 0; i < j-1 ; i++)
{
virus[k] = virus[i];
k++;
}
/*for (int i = 0; i < j*2; i++)//输出病毒序列
{
cout << virus[i];
}
cout << endl;*/
}
int BF(int zhu, int fu, char virus[], char DNA[])//BF算法判断
{
int i = 0, j = 0; while (i <= zhu&&j <= fu)
{
if (DNA[i]==virus[j]){ i++; j++; }
else { i = i - j + 1; j = 0; } }
if (j > fu){ return 1; }
else return 0; }
void virusPossibility()//列出将长度扩大二倍的病毒序列可能性
{
char temp[30];
for (int i = 0; i < j; i++)
{
for (int k = 0; k < j; k++)temp[k] = virus[i + k];
//temp[j] = '\0';
if (BF(DNAlength - j - 1, j - 2, temp, DNA) == 1)flag = 1; }
/*if (flag == 1) { flag = 0; cout << "O" << endl; }
else cout << "X" << endl;
*/ }
void detection()//调用函数判断是否感染
{
int num = 0;
string str;
ifstream infile("病毒检测输入数据.txt", ios::in);
ofstream outfile("病毒检测结果.txt", ios::out);
if (!infile){ cout << "open document ERROE!!" << endl; exit(-1); }
else cout << "The document reads into success!!" << endl;
if (!outfile){ cout << "Establish document failure ERROE!!" << endl; exit(-1); }
getline(infile, str);
num = stof(str);//赋值给num之后判断;
//cout << num;
while (num--)
{
getline(infile, str);
DNAlength = str.length();
toCharArry(str);
addvVirusToDouble(virus);
virusPossibility();
if (flag == 1){ flag = 0; outfile << str + " " + "YES" << endl; }//妈的这里必须把flag弄成0,要不只要有一个是下面的都是了...
else { outfile << str + " " + "NO" << endl; }
} infile.close();
outfile.close(); } int main()
{
string str;
detection();
cout << "The TXTdocument outputs success!!!" << endl; }
程序截图:

老师让思考的作业,网上找了找也没有找到,作为小白,自己动手写了一下分享给大家,造福后来人,代码写的不够好......不要乱喷谢谢!!
数据结构第二版之(课后题)BF算法病毒感染检测的更多相关文章
- C++面向程序设计(第二版)课后习题答案解析
最近没什么心情整理零散的知识点,就整理一下第四章的课后习题答案. 1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算.将运算符函数重载为非成员函数,非友元的普通函数.编程序, ...
- 数据结构Java版之递归与迭代算法(五)
递归的概念很简单,就是自己调用自己. 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果.简单来说迭代就是循环. 在此,我们用一个比较经典的Fibonacci数 ...
- 《python核心编程第二版》课后习题6-12答案
下午脑子瓦特,想了半天也没有想出算法,刚刚抽风终于实现了,特此记录. ̄□ ̄|| 题目 (a)创建一个名字为 findchr()的函数,findchr()要在字符串 string 中查找字符 char, ...
- 武汉科技大学ACM :1004: 华科版C语言程序设计教程(第二版)课后习题3.7
Problem Description 输入无符号短整数k[hex.]和p[oct.],将k的高字节作为结果的低字节,p的高字节作为结果的高字节组成一个新的整数. Input k[hex.]和p[oc ...
- 武汉科技大学ACM :1001: 华科版C语言程序设计教程(第二版)课后习题3.12
Problem Description 输入n,输出对应的边长为n的空心正六边形. 为方便看图,样例中点 '.' 表示空格,打印图形时请打印空格而非小圆点. Input 边长n.(n<=20) ...
- 数据结构(c++)(第二版) Dijkstra最短路径算法 教学示范代码出现重大问题!
前言 去年在数据结构(c++)的Dijkstra教学算法案例中,发现了一个 bug 导致算法不能正常的运行,出错代码只是4行的for循环迭代代码. 看到那里就觉得有问题,但书中只给了关键代码的部分,其 ...
- 算法(JAVA)----两道小小课后题
LZ最近翻了翻JAVA版的数据结构与算法,无聊之下将书中的课后题一一给做了一遍,在此给出书中课后题的答案(非标准答案,是LZ的答案,猿友们可以贡献出自己更快的算法). 1.编写一个程序解决选择问题.令 ...
- 数据结构之BF算法,kmp算法,三元组,十字链表总结
在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...
- C程序设计(谭浩强)第五版课后题答案 第一章
大家好,这篇文章分享了C程序设计(谭浩强)第五版课后题答案,所有程序已经测试能够正常运行,如果小伙伴发现有错误的的地方,欢迎留言告诉我,我会及时改正!感谢大家的观看!!! 1.什么是程序?什么是程序设 ...
随机推荐
- Spring学习(五)
自动装备 1.定义 自动装配(autowiring): 将某个Bean实例中所引用的其它的Bean自动注入到当前Bean实例中 自动装配就是指由Spring来自动地注入依赖对象,无需人工参与. 自动装 ...
- C 语言入门---第十一章---C语言重要知识点补充
====C语言typedef 的用法==== 1. C语言允许为一个数据类型起一个新的别名,就像给人起绰号一样. typedef OldName newName; typedef 和 #define ...
- 该怎样应对IoT和边缘计算安全挑战
导读 虽然智能家居的响应延迟似乎不是大问题,但如果自动驾驶汽车需要刹车,而数据出现延迟或者被黑客拦截或操纵,这可能造成灾难性后果.这里将需要边缘计算安全. 边缘计算可在靠近远程设备的位置提供计算.存储 ...
- springboot 不停服动态更新定时任务时间(转)
转 https://blog.csdn.net/u012129558/article/details/80834303 Spring框架自3.0版本起,自带了任务调度功能,好比是一个轻量级的Quart ...
- 尝试实现一个简单的C语言string类型
用过`C++/Java/python/matlab/JS`等语言后,发现都能很轻松的使用string类型,而C只能这样: char str[] = "hello world"; o ...
- FFmpeg RTSP流通过UDP传输问题
我自己在使用SRS服务的Ingest功能时发现在读取一个网络摄像头的RTSP流时一直不成功, 具体分析后发现SRS在调用FFmpeg时出了问题: /usr/local/ffmpeg/bin/ffmpe ...
- How to add VTL tapes on DD6300 & label them into "Oracle_VTL" pool
Dear all , This is liulei , I was back so , How to add VTL tapes on DD6300 & label them into ...
- 纪录片 - Why Are We Fat?(全3集)
1. 传送门:https://www.bilibili.com/video/av13977351?spm_id_from=333.338.__bofqi.16 2. 笔记 第一型糖尿病是天生的,第二型 ...
- 去除input边框 input去除边框 去除input获取焦点时的蓝色外边框
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【快学springboot】5.全局异常捕获,异常流处理业务逻辑
前言 上一篇文章说到,参数校验,往往需要和全局的异常拦截器来配套使用,使得返回的数据结构永远是保持一致的.参数异常springboot默认的返回结构: { "timestamp": ...