2013-03-19 87 views
0

我已經創建了一個名爲RNA_complement的函數。它應該採用已經從輸入文件流中讀取的一行,並用新字母替換特定字母 (因此爲什麼稱爲補碼)。完成後,應該將結果輸出到輸出文件流(輸出文件)。輸出字符串/字符時出錯(C++)

問題是:它不會將結果輸出到文件,即使我已經爲此寫入了命令。爲什麼沒有經過?

函數被寫入int main函數的外部,函數被聲明爲&在主函數內被初始化。

我已經得到了其他錯誤,如「從字符*的無效轉換爲char」和「不能把字符串轉換成char」,等等。這是令人沮喪

這裏是代碼:

char RNA_complement(string line) 
{ 
char mychar[50]; 
ofstream genesacidnew; 

    for (int i = 0; i < line.length(); i++) 
    { 
    line = mychar[i]; 
     if (mychar[i] == 'A') 
     { 
      mychar[i]= 'Z'; 

     } 
    genesacidnew << "Complement: " <<mychar <<endl; 
} 

} 

於是我決定在這裏初始化

genesacid.open("genes.txt"); 
    if(!genesacid.is_open()) 
    { 
     cerr <<"Error: File cannot be opened"<<endl; 
     return -1; 
    } 
     else 
     { 
      getline(genesacid, line1); 

     } 

genesacid.close(); 



genesacidnew.open("genesoutput.txt"); 
    if(!genesacidnew.is_open()) 
    { 
     cerr <<"Error: File cannot be opened"<<endl; 
     return -1; 
    } 
     else 
     { 
      genesacidnew<<"Fragment 1: " <<line1 <<endl; 
      genesacidnew<<"Complement: "<<endl; 
     } 


RNA_complement(line1); /*here*/ 

genesacidnew.close(); 
+0

當你編譯錯誤或警告,有一個附加的行號。查看該行的相應文件,並嘗試瞭解錯誤或警告並修復它。 – 2013-03-19 20:49:33

+0

即使糾正了明顯的錯誤,這也不是**的補充。 – 2013-03-19 20:54:34

+0

我知道......這只是一個示例代碼。當然,一旦我開始工作,我會寫出真正的。真正的問題是得到的結果輸出到輸出文件 – user2188311 2013-03-19 20:57:49

回答

1

功能在你RNA_complement功能,您寫道:

ofstream genesacidnew; 

您從未指定要寫入哪個文件。使用這樣的

ofstream genesacidnew("Myfilename.ext"); 
+0

好吧,我只是修復它,但輸出文件上的字符出來怪異。我不知道這裏發生了什麼.. – user2188311 2013-03-19 20:54:12

2

首先,讓我們上的RNA互補就是明確:它由與互補的基碼替換RNA鹼基的字母,即AUCG(I」因爲它們很少被使用,所以在這裏忽略IUPAC模糊代碼)。

其次,讓我們指定你的函數的範圍。目前,它(失敗)試圖做兩件事情:

  1. 改變字符串本身,和
  2. 寫入改動基地到一個文件中。

它也返回了一些東西(char),但它不清楚什麼。

讓我們從頭開始,並指定正確的語義:

  • 功能rna_complement(注C++命名約定)採用的RNA片段作爲std::string(全部大寫字母),並返回該片段的補充版本。

這是直截了當的,毫不含糊。 現在我們可以實現它:

std::string rna_complement(std::string fragment) { 
    for (unsigned pos = 0; pos < fragment.length(); ++pos) { 
     switch (fragment[pos]) { 
      case 'A': fragment[pos] = 'U'; break; 
      case 'C': fragment[pos] = 'G'; break; 
      case 'G': fragment[pos] = 'C'; break; 
      case 'U': fragment[pos] = 'A'; break; 
      default: assert(false); // This should never happen. 
     } 
    } 

    return fragment; 
} 
+0

好吧你怎麼會然後輸出結果到輸出文件 – user2188311 2013-03-19 21:07:48

+0

我假設它(輸出文件流)<< line?如果我是對的。 – user2188311 2013-03-19 21:08:20

+0

@ user2188311如果你想輸出整個改變的文本,那麼是的,這將是'geneacidnew << line'在你的代碼,或'geneacidnew << fragment'在我的,因爲該流是正確初始化。 – 2013-03-19 21:11:26