2016-12-05 10 views
1

charに含まれる "A"、 "C"、 "G"、 "T"の文字数をチェックするコードを生成しようとしています。しかし、私はこのことについてどうやって行くのか少し不明です。私が知る限り、.contains()のような演算子はありません。私は今、この権利を持っている私のコードでcharに特定の文字が含まれているかどうかを確認する方法

"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's、C's、G's、およびT's)。そして、私は基本的にそれがcharの内側にあるたびに、それぞれの量に追加しようとしています。助けのための

ありがとう!

+2

ような何か私がチェックした最後の時間シーケンスを読まれます。それ以上、以下ではありません。 –

+0

あなたは、「A」のような文字だけが含まれることになるのですか?それがcharの働きであれば、私は私のロジックを少し変更する必要があると思います:P – Gardenia

+0

はい、それは 'char'です。 1文字それ以上はない。 –

答えて

1

投稿コードに問題があり、そのうちの最大のものが新しいDNAntが作成され、毎回返されます。これにより、今やあなたはDNAntsと数えなければならないので、必要以上に計算方法が複雑になります。

std::map<char,int> DNACount; 

が番号に文字をバインドするオブジェクトを作成します。このコードを修正するのではなく、ここではこれを行うには本当にシンプルで愚かな異なる方法です。

DNACount[toupper(strand)]++; 

がまだ存在しない場合には、これは文字strandの文字/数字のペアを作成し、ゼロに番号を設定します。次に、strandとペアになった番号が1つ増えます。

だから、あなたがしなければならないすべては、 `char`は正確に一つの` char`のための十分な大きさである、

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

関連する問題