DNA密码学突变处理:氨基酸序列密钥生成代码修复求助
修复C#代码实现基于Stop位点生成剩余序列密钥的需求
首先,我们先明确你的需求:给定氨基酸序列,每当遇到Stop时,生成包含从该Stop之后开始的剩余完整序列的密钥,并且第一个密钥是整个原始序列,格式为keyN:序列内容。
原代码的问题
你当前的代码用Replace("Stop", "*")然后Split('*'),得到的是被Stop分割开的片段(比如PhePheLeoArg、ValGlyArgTyr、PheArgGleHis),但这并不是你需要的“剩余完整序列”,所以无法得到预期输出。
修复后的代码
下面是调整后的代码,完全符合你的预期输出:
string mRNA = textBox3.Text; List<string> keys = new List<string>(); // 第一个密钥是完整的原始序列 keys.Add($"key1:{mRNA}"); int currentPosition = 0; int keyCounter = 2; // 循环查找所有"Stop"的位置 while ((currentPosition = mRNA.IndexOf("Stop", currentPosition)) != -1) { // 移动到当前"Stop"的末尾位置("Stop"长度为4) currentPosition += "Stop".Length; // 截取从当前位置开始的剩余字符串 string remainingSequence = mRNA.Substring(currentPosition); // 确保剩余字符串不为空时再添加(避免最后一个Stop在序列末尾的情况) if (!string.IsNullOrWhiteSpace(remainingSequence)) { keys.Add($"key{keyCounter}:{remainingSequence}"); keyCounter++; } } // 将所有密钥添加到listBox1中 foreach (string key in keys) { listBox1.Items.Add(key); }
代码解释
- 初始密钥:直接把完整序列作为
key1添加到列表中,符合预期的第一个输出项。 - 查找Stop位点:用
IndexOf循环遍历序列中所有Stop的位置,每次找到后将索引移动到Stop的末尾。 - 截取剩余序列:从
Stop末尾的位置开始截取子字符串,这就是你需要的“剩余字符串”。 - 格式与添加:按照
keyN:序列的格式生成条目,添加到列表后再批量加入listBox1。
验证输出
对于你的测试序列PhePheLeoArgStopValGlyArgTyrStopPheArgGleHis,运行代码后会得到:
key1:PhePheLeoArgStopValGlyArgTyrStopPheArgGleHis key2:ValGlyArgTyrStopPheArgGleHis key3:PheArgGleHis
完全匹配你预期的结果。
内容的提问来源于stack exchange,提问作者safaa
相关产品推荐
相关产品推荐

