2016-12-05 261 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

相關問題