2012-11-25 121 views
1

我必須比較兩個陣列,每個陣列中都有444個字符,如果它們完全相同,則輸出結果相同。如果他們不是,那麼程序會繼續,直到完成比較所有的陣列。比較兩個不同陣列中的char值

這是我的代碼到目前爲止。我已經多次改變了它,但是我要麼讓程序不向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; 
} 

回答

1

您可以使用std::equal比較兩個數組:

#include <algorithm> 

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

在這裏,你必須確保gene2至少只要gene1

如果您的問題存在於其他地方,那麼您應該在問題標題中明確說明並關注真正的問題。

+0

嗯,我知道每個長度都與我輸入文件的長度相同。我只需要確保所有444個字符在每個數組中都相同或不相同。如果gene1A [1] = A和gene1B [1] = B,那麼我的問題會立即回答,因爲所有444都需要相同。 –

+0

@TannerRoss好的,那麼上面的代碼片段就可以做到。它會在第一個負面比較中返回錯誤。 – juanchopanza

+0

我會在子功能SameGene中添加? –