Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用c++;用于显示“;基因亚串&x201D;从一个更长的原始基因组串_C++_String_Function_Class - Fatal编程技术网

C++ 使用c++;用于显示“;基因亚串&x201D;从一个更长的原始基因组串

C++ 使用c++;用于显示“;基因亚串&x201D;从一个更长的原始基因组串,c++,string,function,class,C++,String,Function,Class,请帮忙。 我正在测试我的基因查找程序,序列TGTATAT,前面加上起始cap ATG,末尾加上结束cap TAA,所以我正在测试基因组ATGTGTATATAA,因为不包括cap,序列长度不是3个字符的倍数,因此它不包含任何基因,应该显示 “未发现任何基因” 黑色的cout窗口不会弹出 但它什么也没显示 //Date: //purpose: find Genes and cout found genes #include <iostream> #include <strin

请帮忙。 我正在测试我的基因查找程序,序列TGTATAT,前面加上起始cap ATG,末尾加上结束cap TAA,所以我正在测试基因组ATGTGTATATAA,因为不包括cap,序列长度不是3个字符的倍数,因此它不包含任何基因,应该显示

“未发现任何基因”

黑色的cout窗口不会弹出 但它什么也没显示

//Date: 
//purpose:  find Genes and cout found genes

#include <iostream>
#include <string>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
int main() 
{
    string genome = "ATGTGTGTGTATATTAA"; //testing this string
        /*cout << "Enter a genome string: ";
    cin >> genome;*/

        int geneCounter = 0;


while(!genome.empty())  //enters loop if strings not empty
{


if(genome.find("ATG",0) == string::npos) //genome.find("ATG",0,3) should return npos if no ATG is found right? 
{   
    if(geneCounter == 0)
    {
    cout << "no gene is found";  
    genome.clear(); 
    }
}
else
{
    int startGene = genome.find("ATG",0); //ATG is not part of gene just a front endcap to genes
    int endGene = min(min(genome.find("TAG"), genome.find("TAA")), genome.find("TGA"));//endcaps are TAG or TAA or TGA 
                                                                                       //finds location of (1+ gene end) 


    string currentGene = genome.substr(startGene + 3, endGene - (startGene +3)); //puts copy of gene in substring

    if((currentGene.length() % 3) == 0)
    {
        geneCounter += 1;
        cout << currentGene <<endl;//a gene is a multiple of three characters so if its a gene I cout the gene
    }

    endGene += 3;
    genome.erase(0, endGene); //should erase the gene I just "cout"displayed 
                                                //and its front ATG and its endcap and anything before its ATG

    //cout << genome; //testing: this should display the genome after the endcap of the last gene cause I erased all coming before 
}
}



return 0;
}
//日期:
//目的:寻找基因和未发现基因
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
string genome=“atgtatattaa”//测试此字符串
/*cout>基因组*/
int基因计数器=0;
而(!genome.empty())//如果字符串不为空,则进入循环
{
if(genome.find(“ATG”,0)=string::npos)//genome.find(“ATG”,0,3)如果没有找到ATG,应该返回npos,对吗?
{   
如果(geneCounter==0)
{

这听起来像是一个干净的正则表达式解决方案的完美用例。再次验证基因字符串的确切规则是什么

从ATG开始

三个字符的基因。允许使用什么字符

以TTA结尾

使用类似正则表达式的

^ATG([A-Z]{3})+TTA$
^是行的开头。ATG是一个要精确匹配的字符串。([a-Z]{3})+是一个匹配的组,意味着它将被提取为查找到的组,并从a-Z中提取三个字符a。TTA也是一个精确匹配。加号表示只有在至少找到该组中的一个时才有效。$是行的结尾

如果[A-Z]是有效字符,则可以使用[ATGE]代替[A-Z]

这将完全解决您的问题。为所有内部三个字符子字符串提供一个迭代器,同时检查长度开始和结束


这听起来像是一个干净的正则表达式解决方案的完美用例。再次验证基因字符串的确切规则是什么

从ATG开始

三个字符的基因。允许使用什么字符

以TTA结尾

使用类似正则表达式的

^ATG([A-Z]{3})+TTA$
^是行的开头。ATG是一个要精确匹配的字符串。([a-Z]{3})+是一个匹配的组,意味着它将被提取为查找到的组,并从a-Z中提取三个字符a。TTA也是一个精确匹配。加号表示只有在至少找到该组中的一个时才有效。$是行的结尾

如果[A-Z]是有效字符,则可以使用[ATGE]代替[A-Z]

这将完全解决您的问题。为所有内部三个字符子字符串提供一个迭代器,同时检查长度开始和结束


while循环的第一次迭代进入
else
块,并以

genome.erase(0, endGene);
这会擦除整个基因组,因此当检查
while
条件时

while(!genome.empty())
基因组
为空,因此程序退出

尝试将while条件更改为:

while(true)

这可能不是最终目标,但可能有助于引导您朝着正确的方向前进。

while循环的第一次迭代进入
else
块,并以

genome.erase(0, endGene);
这会擦除整个基因组,因此当检查
while
条件时

while(!genome.empty())
基因组
为空,因此程序退出

尝试将while条件更改为:

while(true)

这可能不是最终目标,但它可能有助于引导您朝着正确的方向前进。

如果一开始不是3的倍数,那么添加两个长度为3的大写字母如何使其成为3的倍数?当然,11不是3的倍数,但也不是17的倍数。只有尾端大写字母之间的字符才应显示在cout中,并且仅当这些字符的编号为端盖之间的s是3的倍数。我测试的序列应该是“没有发现基因”如果一开始不是3的倍数,那么添加两个长度为3的大写字母如何使其成为3的倍数?当然,11不是3的倍数,但17也不是。只有尾端大写字母之间的字符应该显示在cout中,并且只有尾端大写字母之间的字符数是3的倍数。我正在测试的序列应该是cout“未发现任何基因”我认为我的代码不应拒绝显示基因中的任何字符,以查找起始端盖ATG和第一个结束端盖(TAA或TGA或TAG)它位于字符串中这个ATG之后,然后显示字符串中介于起始cap和后续结束cap之间的部分。但是在显示这个字符串之前,它会测试这个子字符串是否是3个字符的倍数,如果不是,它应该显示“未发现基因”看起来很有趣,但我不知道该^ATG的确切位置([A-Z]{3})+TAA$将包含在我的代码中。我需要做什么才能使用它?如果你必须经常解决模式匹配问题,它绝对值得学习正则表达式。我将用更多信息更新答案,但这是我最喜欢的关于这个主题的教程之一(lynda.com不是feee,而是值得每一分钱)我不认为我的代码应该拒绝基因中的任何字符,这些字符将被显示出来,以便找到起始cap ATG和第一个结束cap(TAA或TGA或TAG)它位于字符串中这个ATG之后,然后显示字符串中介于起始cap和后续结束cap之间的部分。但是在显示这个字符串之前,它会测试这个子字符串是否是3个字符的倍数,如果不是,它应该显示“未发现基因”看起来很有趣,但我不知道该^ATG的确切位置([A-Z]{3})+TAA$将包含在我的代码中。我需要做什么才能使用它?如果你必须经常解决模式匹配问题,它绝对值得学习正则表达式。我将用更多信息更新答案,但这是我最喜欢的关于这个主题的教程之一(lynda.com不是feee,而是值得每一分钱)