首页 > 解决方案 > 在 C++ 中遇到“字符串下标超出范围”的问题

问题描述

每次我尝试输入“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'。它适用于其余部分。

标签: c++visual-studio

解决方案


@Yksisarvinen 是正确的。的增加y是您的主要问题。它适用u而不适用的另一个原因t是因为您的代码不对任何其他字母进行处理。if (base == 't')是您的代码段中提供的唯一案例。

您还可以y用作外部while 循环和内部while 循环的变量。这可能是故意的行为,请小心。您的内部 while 循环将递增y,而新的更大的值将是y外部 while 循环中使用的值。

您在 while 循环中设置DNA = sequence;sequence = mRNA_sequence;内部而不会破坏它。请记住,while 循环现在将有一个新的“序列”用于sequence.length()调用 while 循环。由于我相信您的代码意味着 DNA 和 mRNA 序列的长度值相同,因此您可能会偷偷摸摸,但这很危险。您的条件状态为 while (y != sequence.length()),如果 mRNA_sequence 比初始序列短,则y可能大于长度,这仍然会通过您的 while 条件。


推荐阅读