在C ++中遇到“字符串下标超出范围”的问题

时间:2019-04-09 17:26:57

标签: c++ visual-studio

每次我尝试输入'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'。其余的都可以。

1 个答案:

答案 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条件。