Строка найти и заменить выход за пределы - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь найти и заменить кодоны в последовательности рибосомами. Большая строка проверяется с помощью индекса из массива поиска, и, если найдено совпадение, этот трехбуквенный кодон заменяется соответствующей трехбуквенной рибосомой из массива замены. Однако в моей функции поиска и замены я получаю сообщение об ошибке «Необработанное исключение в 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», не выходя за пределы диапазона.

...