输出字符串/字符的错误(C ++)

时间:2013-03-19 20:46:26

标签: c++

我创建了一个名为RNA_complement的函数。它应该采用已从输入文件流中读取的行并替换特定字母 用新的字母(因此它被称为补充)。完成后,它应该将结果输出到输出文件流(到输出文件)。

问题是:它没有将结果输出到文件,即使我已经为它写了一个命令。为什么不通过?

该函数是在int 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();

2 个答案:

答案 0 :(得分:2)

首先,让我们弄清楚RNA补体是什么:它包括用互补碱基代码替换RNA碱基的字母,即AUCG(我在这里忽略了IUPAC模糊代码,因为它们很少使用)。

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

  1. 更改字符串本身,
  2. 将更改的基数写入文件。
  3. 它也会返回一些内容(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;
    }
    

答案 1 :(得分:1)

在你写的RNA_complement函数中:

ofstream genesacidnew;

您从未指定要写入的文件。像这样使用

ofstream genesacidnew("Myfilename.ext");