输出字符串/字符错误(c++)

Errors with outputing strings/chars (C++)

本文关键字:c++ 错误 字符 字符串 输出      更新时间:2023-10-16

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

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

函数写在int main函数之外,函数声明为&在main函数内部初始化。

我得到了其他错误,如"从char*到char的无效转换"answers"不能将字符串转换为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();

首先,让我们弄清楚什么是RNA补体:它由用互补碱基代码替换RNA碱基的字母组成,即AUCG(我在这里忽略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;
}

您在RNA_complement函数中写道:

ofstream genesacidnew;

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

ofstream genesacidnew("Myfilename.ext");