首先我们需要在保存代码的文件夹下新建议个文本文件(这里文件名为:1)用来保存需要检测的数据,格式为:
然后再建一个名为2的文本文件用来保存结果。

1,注意把这些文件和代码的.CPP文件保存在一个文件夹下的目的是为了对文件进行操作时不需要添加文件的路径以减少出错的概率

2,根据实际情况中病毒的DAN是环状的而我们保存病毒DNA的字符串却是线性的额,因此病毒DNA的起始位置是不确定的。在这里我们可以运用一个小技巧:把病毒的DNA连续在字符串中连续保存两次然后再依次取原来长度的字串即可

话不多说直接上代码:

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
using namespace std;
int main()
{string p1,s;fstream f;f.open("1.txt",ios::in);while(f>>p1>>s){int sum1=p1.size();//记录病毒DNA的长度; int sum2=s.size();s=" "+s;string p=p1;p+=p1;//   cout<<p<<endl;int flage1=1;for(int i=0;i<sum1;i++){int flage2=0;string p2;p2=" "+p.substr(i,sum1);//    cout<<p2<<endl;//KMP求next数组的过程 int ne[1010];memset(ne,0,sizeof ne);for(int i=2,j=0;i<=sum1;i++){while(j&&p2[i]!=p2[j+1]) j=ne[j];if(p2[i]==p2[j+1]) j++;ne[i]=j;}// cout<<s<<endl; //字符串匹配的过程 for(int i=1,j=0;i<=sum2;i++){while(j&&s[i]!=p2[j+1]) j=ne[j];if(s[i]==p2[j+1]) j++;if(j==sum1){//  cout<<"YES"<<endl;flage2=1;ofstream file;file.open("./2.txt", ios_base::app);if (!file.is_open()){cout<<"打开文件失败";}string ss;ss=p1+"    "+s+"   "+"YES";file<<ss<<endl;file.close();break;}}if(flage2) {flage1=0;break;}}if(flage1){//  cout<<"NO"<<endl;ofstream file;file.open("./2.txt", ios_base::app);if (!file.is_open()){cout<<"打开文件失败";}string ss;ss=p1+"    "+s+"   "+"NO";file<<ss<<endl;file.close();}    }string s1,s2,s3;fstream f2;f2.open("2.txt",ios::in);while(f2>>s1>>s2>>s3){cout<<s1<<"   "<<s2<<"   "<<s3<<endl;}return 0;
} 

执行后结果文件里保存的结果为:

以文件读取和写入的方式实现病毒和人DNA的匹配(采用KMP算法)相关推荐

  1. 【python】文件读取写 open的方式with的方式 异常报错处理

    前言 1.文件读取 (open的方式) (with的方式) open的方式:读取异常-->原因:未关闭文件 2.写入文件 (open的方式) (with的方式) 3.读取后写入新文件 1.文件读 ...

  2. C语言的文件读取与写入操作

    学了一年的C语言了,现在回过头来做一下总结.并且博客开了挺长一段时间却没有谢什么实际的东西.现在做下总结,对之后的学习帮助应该挺大的.与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具 ...

  3. c语言文件读取与写入

    fopen的介绍转自百度百科:https://baike.baidu.com/item/fopen/10942321?fr=aladdin 函数原型: FILE * fopen(const char ...

  4. Java 高效大文件 读取 和 写入(一亿行)

    写文件 需求:写入1亿行,7位以内的随机的数字. 首先看成果图,代表没骗大家!!!!! 这个是最终生成的文件,有770多MB .下面用glogg打开预览: 程序打印耗时 7149ms + 923 ms ...

  5. vivado仿真 文件读取和写入

    vivado仿真 文件读取和写入 读取文件 首先创建一个TXT文件. $readmemb和$readmemh用来从文件中读取数据到存储器中.其中readmemb要求每个数字是二进制数,readmemh ...

  6. Java CSV文件读取、写入及追加

    Java CSV文件读取.写入及追加 https://blog.csdn.net/liq816/article/details/81286472 追加: FileOutputStream out = ...

  7. c#大文件读取和写入数据库

    c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...

  8. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...

    文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...

  9. python数据框元素的性质_Pandas基础:文件读取与写入、Series和Dataframe、常用基本函数、排序...

    import pandas as pd import numpy as np 查看Pandas版本 pd.__version__ 一.文件读取与写入 1.读取 (a)csv格式 df = pd.rea ...

最新文章

  1. 本机镜像仓库base64解密
  2. java字节数_Java各种类型占用的字节数
  3. RabbitMQ管理(3)——Web端管理
  4. Sybase插入数据库遭遇sybase Unexpected EOF encountered in BCP data-file.
  5. 【Java】计算1+1/2!+1/3!+1/4!....前20项
  6. Web前端新手一定要知道的几个框架!
  7. 【数据结构与算法基础】队列、栈、递归
  8. 什么是Hadoop,怎样学习Hadoop
  9. naivcat 破解安装教程(永久)
  10. 推荐一个基于Spring Boot + Vue的实习管理系统
  11. Mac的开机启动项如何关闭?
  12. telink wiki使用简单说明
  13. Codeforces Round #393 Frodo and pillows
  14. 《千与千寻》告诉产品经理什么?
  15. CSS3与页面布局学习笔记(四)——页面布局大全(负边距、双飞翼、多栏、弹性、流式、瀑布流、响应式布局)
  16. Could not retrieve mirrorlist
  17. MD5单向散列算法详解
  18. LaTeX入门级教程
  19. 探针台选型的有哪些注意事项
  20. 单片机-硬件接口(UART/IIC/SPI/RS232/USB/CAN)异同

热门文章

  1. 不死的EternalBlue(永恒之蓝)
  2. ubuntu9.10稳定运行QQ2008和迅雷
  3. Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树
  4. iOS网络请求指南之《封装银联接口协议》(提交和返回数据都为XML格式)案例:备用无卡通道(收银台的订单退款、查询机制)【对接条码支付综合前置平台被扫支付订单申请退款(退款查询)】
  5. CentOS下Samba服务器配置
  6. [实践篇]13.19 Qnx进程管理slm学习笔记(二)
  7. excel小写转大写公式_让娃爱上学习,Excel 自动检查数学作业,从此母慈子孝
  8. [Skr-Shop]通用抽奖工具之需求分析
  9. 2023全新彩虹晴天多功能系统源码 知识付费系统 虚拟商城系统 完美可用
  10. 利用宏和VBA设计产品出入库查询系统: