c++ - 在 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'。它适用于其余部分。
解决方案
@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 条件。
推荐阅读
- mongodb - MongoDB Remove 操作不删除索引
- ssh - 如何解决tendermint中的这个jepsen测试错误?com.jcraft.jsch.JSchException:java.net.UnknownHostException:n1
- r - 无法运行降价 - 使用 ggplot 的代码出错
- list - 如何在元组列表中找到所有最小元素?
- wso2esb - wso2 esb代理休息服务无响应
- python-3.x - 解析 PDF 时对 Devanagiri 字体的错误解码
- node.js - 数组作为sql请求参数
- c# - 在 MVC 中测试控制器时如何转换恢复的 JSON 对象
- android - 如何在 Android Studio 中用 .add() 替换所有 =
- c# - 从 web api 返回一个 zipfile