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

news/2024/11/22 20:09:34/

首先我们需要在保存代码的文件夹下新建议个文本文件(这里文件名为: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;
} 

执行后结果文件里保存的结果为:在这里插入图片描述


http://www.ppmy.cn/news/729371.html

相关文章

【若依框架学习】day1-启动项目

若依开源框架&#xff0c;前后端分离项目&#xff0c;地址&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/ 先配置环境 JDK1.8&#xff0c; MySQL5.7 &#xff0c;Maven3.6&#xff0c;redis、nginx(可以不配)、 node 具体见&#xff1a;https://ygstriver.blog.csdn.net/articl…

MPB:生态环境中心韩丽丽等-土壤病毒组富集及DNA提取

为进一步提高《微生物组实验手册》稿件质量&#xff0c;本项目新增大众评审环节。文章在通过同行评审后&#xff0c;采用公众号推送方式分享全文&#xff0c;任何人均可在线提交修改意见。公众号格式显示略有问题&#xff0c;建议电脑端点击文末阅读原文下载PDF审稿。在线文档(…

病毒感染检测问题

题目&#xff1a;  医学研究者最近发现了某些新病毒&#xff0c;通过对这些病毒的分析&#xff0c;得知他 们的DNA序列都是环状的。现在研究者已收集了大量的病毒DNA和人 的DNA数据&#xff0c;想快速检测出这些人是否感染了相应的病毒。为了方便 研究&#xff0c;研究者将人…

Nature子刊:来自人类肠道菌群的189,680种DNA病毒基因组集

翻译&#xff1a;周之超UW-Madison 来自人类肠道菌群的 189,680 种 DNA 病毒的宏基因组汇编 Metagenomic compendium of 189,680 DNA viruses from the human gut microbiome viruses Nature Microbiology [IF: 17.745] DOI&#xff1a;https://doi.org/10.1038/s41564-021-009…

数据结构---KMP模式匹配病毒感染人的DNA检测

数据结构—KMP模式匹配病毒感染人的DNA检测 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 int next[N]; void getNext(char *T, int *next, int m) {//求解当前字符前面的最大公共前缀和后缀int j …

计算机病毒有哪些名称和时间,计算机病毒名称,请举出所有您知道的生物病毒的名称,越多越好。...

第一类是双链DNA病毒(如腺病毒、疱疹病毒、痘病毒) 第二类是单链DNA病毒()DNA(如小DNA病毒) 第三类是双链RNA病毒(如呼肠孤病毒) 第四类是()单链RNA病毒(如微小核糖核酸病毒、披盖病毒) 第五类是(−)单链RNA病毒(如正黏液病毒、炮弹病毒) 第六类是单链RNA反转录病毒(如反转录病…

计算机病毒范畴有,计算机病毒是否属于生物的范畴?

导读&#xff1a;病毒同所有生物一样,具有遗传、变异、进化的能力,是一种体积非常微小,结构极其简单的生命形式,病毒有高度的寄生性,完全依赖宿主细胞的能量和代谢系统,获取生命活动所需的物质和能量,离开宿主细胞,它只。病毒同所有生物一样&#xff0c;具有遗传、变异、进化的…

python编写病毒扫描器_基于Python的病毒扫描机制

构建集中式病毒扫描机制(ClamAV) Clam AntiVirus(ClamAV)是一款免费而且开源的防毒软件,软件与病毒库的更新皆有社区免费发布,官网地址:http://www.clamav.net/lang/en/。目前ClamAV主要为Linux、Unix系统提供病毒扫描、查杀服务等。pyClamad((http://xael.org/norman/pytho…