0

RNA_complement という関数を作成しました。入力ファイルストリームから既に読み取られた行を取得し、特定の文字を新しい文字に置き換えることになっています (したがって、補完と呼ばれます)。完了したら、結果を出力ファイル ストリーム (出力ファイル) に出力することになっています。

問題は、そのためのコマンドを書いたにもかかわらず、結果をファイルに出力していないことです。通じないのはなぜ?

関数は int main 関数の外で記述され、関数は main 関数内で宣言および初期化されました。

「char* から 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();
4

2 に答える 2

2

まず、RNA 相補体とは何かを明確にしましょう。これは、RNA 塩基の文字を相補的な塩基コード、つまりAUC↔に置き換えることで構成されますG(IUPAC のあいまいなコードはめったに使用されないため、ここでは無視しています)。

次に、関数のスコープを指定しましょう。現時点では、(失敗しましたが) 2 つのことを試みます。

  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;
}
于 2013-03-19T21:01:43.553 に答える
1

あなたのRNA_complement関数では、次のように書きました:

ofstream genesacidnew;

どのファイルに書き込むかを指定していません。このように使用します

ofstream genesacidnew("Myfilename.ext");
于 2013-03-19T20:49:04.333 に答える