数据结构第二版之(课后题)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.什么是程序?什么是程序设 ...
随机推荐
- 【python-leetcode25-翻转链表】K 个一组翻转链表
问题描述: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 ...
- 【转载】手把手教你使用Git(简单,实用)
手把手教你使用Git(简单,实用) 标签: git 2016年04月21日 20:51:45 1328人阅读 评论(0) 收藏 举报 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. ...
- java使用netty模拟实现一个类dubbo的分布式服务调用框架
本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...
- Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
Springboot + redis + 注解 + 拦截器来实现接口幂等性校验 1. SpringBoot 整合篇 2. 手写一套迷你版HTTP服务器 3. 记住:永远不要在MySQL中使用UTF ...
- 一键GHOST使用图文教程
一.准备工作 系统安装好以后,对系统进行及时备份,以防不测,以后恢复时三五分钟即可完成,还你一个全新的完整系统. 一键GHOST V8.3 Build 060903 硬盘版免费下载 从以上地址下载软件 ...
- ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。
下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ...
- No module named 'widgets'
https://blog.csdn.net/heatdeath/article/details/70313645 适配python3的. https://github.com/twz915/Djang ...
- Ubuntu 16.04 编译安装&&用dpkg安装--zabbix3.4
编译安装zabbix3.4,官方有教程,但是遇到一些报错: 总结下来,需要安装这些环境: 更新系统: apt update apt upgrade 先装这些: apt-get install libm ...
- java并发之CopyOnWriteArraySet
java并发之CopyOnWriteArraySet CopyOnWriteArraySet是基于CopyOnWriteArrayList实现的,持有CopyOnWriteArrayList的内部对象 ...
- Hystrix熔断机制导致误报请求超时错误
问题的过程如下: (1)前端向服务端请求往HBase插入1000条数据: (2)请求经路由网关Zuul传递给HBaseService,HBaseService执行插入操作: (3)插入操作需要的时间超 ...