2016-12-05 5 views
1

Ich versuche Code zu erzeugen, der prüft, wie viele Zeichen "A", "C", "G" und "T" ein Zeichen enthält. Aber ich bin ein wenig unsicher, wie ich das machen soll ... denn soweit ich weiß, gibt es keine Operatoren wie .contains(), mit denen man sich abmühen kann.Wie überprüft man, ob ein Char einen bestimmten Buchstaben enthält

Die gewünschte Ausgabe wäre so etwas wie:

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

In meinem Code ich dieses Recht jetzt haben:

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 ist eine Struktur, die die gewünschten Variablen hat, die ich Überprüfung auf (die A's, C's, G's und T's). Und ich versuche, die Menge von jedem zu addieren, wann immer ich es innerhalb des Chars finde.

Danke für die Hilfe!

+2

ich das letzte Mal überprüft gelesen wird, ist ein 'char' groß genug für genau ein' char'. Nicht mehr und nicht weniger. –

+0

Sie meinen, ein Char würde nur einen Charakter wie "A" enthalten? Wenn Char so funktioniert, dann denke ich, dass ich meine Logik ein bisschen ändern muss: P – Gardenia

+0

Ja, das ist was ein 'char' ist. Ein Charakter. Nicht mehr und nicht weniger. –

Antwort

1

Viele Probleme mit dem gebuchten Code, der größte davon ist ein neues DNAnt wird erstellt und jedes Mal zurückgegeben. Dies wird die Zählweise komplizierter machen, als es notwendig ist, weil Sie jetzt DNAnts zählen müssen. Statt diesen Code zu fixieren, ist hier eine wirklich einfache und dumm andere Art und Weise, dies zu tun:

std::map<char,int> DNACount; 

erzeugt ein Objekt, das ein Zeichen für eine Reihe bindet.

DNACount[toupper(strand)]++; 

Wenn es schon nicht ist, schafft dies ein Zeichen/Zahl Paarung für das Zeichen strand und setzt die Zahl auf Null. Dann wird die Nummer gepaart mit strand um eins erhöht.

Also alles, was Sie tun müssen, um durch die Sequenz so etwas wie

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

Verwandte Themen