每次我尝试输入't'时,都会返回“字符串下标超出范围”
while ((y != sequence.length()) && (base != 'u' || base != 't')) {
base = sequence[y];
y++;
if (base == 't')
{
//if the sequence is DNA
while (sequence[y] != sequence[z])
{
if (sequence[y] == 't')
{
mRNA_sequence += 'a';
}
else if (sequence[y] == 'a')
{
mRNA_sequence += 'u';
}
else if (sequence[y] == 'c')
{
mRNA_sequence += 'g';
}
else if (sequence[y] == 'g')
{
mRNA_sequence += 'c';
}
y++;
}
DNA = sequence;
sequence = mRNA_sequence;
}
}
如果我输入't',它应该变成'a'。其余的都可以。
答案 0 :(得分:0)
@Yksisarvinen是正确的。 y
的递增是您的主要问题。它适用于u
而不适用于t
的另一个原因是因为您的代码未对任何其他字母进行处理。 if (base == 't')
是您的摘录中提供的唯一情况。
您还可以将y
用作外部while循环和内部while循环的变量。这可能是预期的行为,请谨慎。您的内部while循环将增加y
,而新的较大值将是外部while循环中使用的y
值。
您可以在while循环中设置DNA = sequence;
和sequence = mRNA_sequence;
而不中断它。请记住,while循环现在将在while循环的sequence.length()
调用中使用新的“序列”。由于我相信您的代码的DNA和mRNA序列的长度值应相同,因此您可能会偷偷摸摸,但这很危险。您的状况说明为(y != sequence.length())
,而如果mRNA_sequence短于初始序列,则y
可能大于长度,这仍然会通过您的while条件。