我创建了一个名为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();
答案 0 :(得分:2)
首先,让我们弄清楚RNA补体是什么:它包括用互补碱基代码替换RNA碱基的字母,即A
↔U
和C
↔G
(我在这里忽略了IUPAC模糊代码,因为它们很少使用)。
其次,让我们指定你的功能范围。目前它(不成功)试图做两件事:
它也会返回一些内容(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");