1

それぞれが444文字の2つの配列を比較する必要があります。それらがまったく同じである場合は、それらが同一であると出力します。そうでない場合、プログラムは、すべての配列を相互に比較することが完了するまで続行されます。

これはこれまでの私のコードです。私はそれを数回変更しましたが、プログラムがoutFileに何も出力しないようにします(同一であると想像するか、教授がこれを行うように要求しないので、間違っていると思うものはどれも同一ではないと言います)または、すべての遺伝子鎖が同一であると言います。

#include iostream
#include string
#include fstream
using namespace std;

ifstream inFile;
ofstream outFile;


bool SameGene(char gene1[], char gene2[], int size)

{
    for(int i=0, j=0;i<444 && j<444;i++,j++)
        if(gene1[i] != gene2[j])
            return false;

    return true;
}


int main()
{

    inFile.open("dna.txt");
    outFile.open("DNAanalysis.txt.");

    char gene1A[444], gene2A[444];

    char gene1B[444], gene2B[444];

    char gene1C[444], gene2C[444];

    char gene1D[444], gene2D[444];

    inFile.read(gene1A, 444);
    inFile.read(gene2A, 444);
    inFile.read(gene1B, 444);
    inFile.read(gene2B, 444);
    inFile.read(gene1C, 444);
    inFile.read(gene2C, 444);
    inFile.read(gene1D, 444);
    inFile.read(gene2D, 444);

    if(SameGene(gene1A, gene1B, 444) || SameGene(gene2A, gene2B, 444))
        outFile << "Person A and Person B are related." << endl;
    if(SameGene(gene1A, gene1C, 444) || SameGene(gene2A, gene2C, 444))
        outFile << "Person A and Person C are related." << endl;
    if(SameGene(gene1A, gene1D, 444) || SameGene(gene2A, gene2D, 444))
        outFile << "Person A and Person D are related." << endl;
    if(SameGene(gene1B, gene1C, 444) || SameGene(gene2B, gene2C, 444))
        outFile << "Person B and Person C are related." << endl;
    if(SameGene(gene1B, gene1D, 444) || SameGene(gene2B, gene2D, 444))
        outFile << "Person B and Person D are related." << endl;
    if(SameGene(gene1C, gene1D, 444) || SameGene(gene2C, gene2D, 444))
        outFile << "Person C and Person D are related." << endl;

    return 0;
}
4

1 に答える 1

1

std::equal2つの配列を比較するために使用できます。

#include <algorithm>

bool same = std::equal(gene1, gene1+444, gene2);

ここでgene2は、少なくともと同じ長さであることを確認する必要がありgene1ます。

問題が他の場所にある場合は、質問のタイトルでこれを明確にし、実際の問題に焦点を当てる必要があります。

于 2012-11-25T18:42:08.917 に答える