2016-12-05 161 views
1

我正在尝试生成将检查字符包含多少“A”,“C”,“G”和“T”字符的代码。但我有点不确定如何去做这件事..因为据我所知,没有任何运营商像.contains()检查。如何检查一个字符是否包含特定字母

所需的输出会是这样的:

"The char contains (variable amount) of letter A's" 

在我的代码我现在有这个权利:

DNAnt countDNAnt(char strand) 
{ 
    DNAnt DNA; 

    if (isupper(strand) == "A") 
    { 
     DNA.adenine++; 
    } 
    else if (isupper(strand) == "C") 
    { 
     DNA.cytosine++; 
    } 
    else if (isupper(strand) == "G") 
    { 
     DNA.guanine++; 
    } 
    else if (isupper(strand) == "T") 
    { 
     DNA.thymine++; 
    } 
} 

DNAnt是有我检查所需的变量结构(A,C,G和T)。而我试图基本上增加每个每当我发现它在char中的数量。

感谢您的帮助!

+2

我最后一次检查通过顺序读的东西,一个'char'是整整一个'char'足够大。没有更多,也没有更少。 –

+0

你的意思是,一个字符只会包含像“A”这样的字符?如果这就是char的工作方式,那么我认为我需要稍微改变自己的逻辑:P – Gardenia

+0

是的,这就是'char'的意思。一个字符。没有更多,不少。 –

回答

1

很多与发布的代码,其中最大的是一个新的DNAnt问题是每次创建和返回。这会使计数方式比所需要的更加复杂,因为现在您必须统计DNAnts。相反修复此代码,这里有一个非常简单的和愚蠢不同的方式做到这一点:

std::map<char,int> DNACount; 

创建结合文字,数字的对象。

DNACount[toupper(strand)]++; 

如果没有的话,这将创建角色strand字符/数字配对,并设置数量为零。然后与strand配对的号码加1。

因此,所有你需要做的就是像

std::map<char,int> DNACount; 
for (char nucleotide:strand)// where strand is a string of nucleotide characters 
{ 
    DNACount[toupper(nucleotide)]++; 
} 
std::cout << "A count = " << DNACount['A'] << '\n'; 
std::cout << "C count = " << DNACount['C'] << '\n'; 
.... 

Documentation for std::map

相关问题