数据结构第二版之(课后题)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.什么是程序?什么是程序设 ...
随机推荐
- LDAP-轻量级目录访问协议(统一认证)
概念 LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP. 参考资料 LDAP概念和原理介绍 我花了一个五一终于搞懂 ...
- Spring boot 2.x 中使用redis
一.添加Maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- Linux (Ubuntu) 服务器安装MySQL,设置不限ip,root远程密码访问
1.注释bind-address = 127.0.0.1 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 将bind-address = 127.0.0.1 ...
- 使用display inline-block 布局时,出现的间距问题的解决办法和相关说明
在CSS中,块级对象元素会单独占一行显示,多个block元素会各自新起一行.而内联对象元素前后不会产生换行,一系列inline元素都在一行内显示,直到该行排满. 使用 display inline-b ...
- Django 学习 之路由层(URL)
路由层(URL) 1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.si ...
- C++11并发编程4------线程间共享数据
举个例子: 刚参加工作的你,只能租房住,嫌房租贵就和别人合租了,两个人住一起只有一个洗手间,每天早上起床的时候,如果你室友在洗手间,你就只能等着,如果你强行进去,那画面就不可描述了.同样的问题,如果多 ...
- 科学计算库(BLAS,LAPACK,MKL,EIGEN)
函数库接口标准:BLAS (Basic Linear Algebra Subprograms)和LAPACK (Linear Algebra PACKage) 1979年,Netlib首先用Fortr ...
- C. Gas Pipeline DP
C. Gas Pipeline time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- ORM常用字段及查询
目录 ORM常用字段及参数 创建表 ORM常用字段 ORM字段参数 ORM表关系创建 ForeignKey OneToOneField ManyToManyField 多对多三种创建方式 单表查询 q ...
- 视图家族 & 路由组件
目录 视图家族 & 路由组件 视图集与路由组件 基于 GenericAPIView 的十大接口 基于 generics 包下工具视图类的六大基础接口 视图集 路由组件:必须配合视图集使用 自定 ...