Я пытаюсь найти и заменить кодоны в последовательности рибосомами. Большая строка проверяется с помощью индекса из массива поиска, и, если найдено совпадение, этот трехбуквенный кодон заменяется соответствующей трехбуквенной рибосомой из массива замены. Однако в моей функции поиска и замены я получаю сообщение об ошибке «Необработанное исключение в 0x773DC6F2 в HW6.exe: исключение Microsoft C ++: std :: out_of_range в расположении памяти 0x00CFF19C. Произошло»
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
bool check(string mRNA);
string replace(string mRNA, string search, string replacement);
int main() {
string mRNA;
string temp;
string search[11] = { "AUG", "UUU", "UUC", "AUU", "AUC", "AUA", "GUU", "GUC", "GUA", "GUG" };
string replacement[11] = { "MET", "PHE", "PHE", "ILE", "ILE", "ILE", "VAL", "VAL", "VAL", "VAL", "ALA" };
while (temp != "EXIT") {
cout << "Please enter an mRNA sequence or type exit to exit." << endl;
getline(cin, temp);
for (int i = 0; i < temp.length(); i++) {
temp[i] = toupper(temp[i]);
for (int j = 0; j < 10; j++) {
mRNA = replace(mRNA, search[j], replacement[j]);
}
string replace(string mRNA, string search, string replacement) {
int pos = 0;
while ( pos != mRNA.length()) {
//pos = mRNA.find(search);
mRNA.replace(pos, 3, replacement);
cout << pos << endl;
//pos += 3;
pos = mRNA.find(search);
cout << pos << endl;
}
return mRNA;
}
Если вы введете «ugauag», программа должна вернуть «METUGA», не выходя за пределы диапазона.