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 碱基的字母,即AUCG(我在这里忽略了 IUPAC 歧义代码,因为它们很少使用)。

其次,让我们指定函数的范围。目前它(不成功)尝试做两件事:

  1. 更改字符串本身,然后
  2. 将更改的碱基写入文件。

它还返回一些东西 ( char) 但不清楚是什么。

让我们从头开始并正确指定语义:

  • 该函数rna_complement(注意 C++ 命名约定)将 RNA 片段作为 a 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 回答