Ошибка Microsoft C++ exception: std::out_of_range at memory location [закрыт]

264
02 декабря 2019, 21:00

Выдает ошибку Microsoft C++ exception: std::out_of_range at memory location Как я поняла, то ошибка в последней функции replace. Но что именно не так, не вижу. В отладчике все значения передает.

#include "pch.h"
#include<windows.h>
#include <iostream>
#include<string>
#include<cctype>
#include<wchar.h>
#include<algorithm>>
using namespace std;
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int k = 0;
string sentence;
string students[5];
string lowercase[5];
cout << "Введите фамилии студентов:  " << endl;
setlocale(LC_ALL, "");
for (int i = 0;i < 5;i++)
{
    getline(cin, students[i]);
}
cout << "Введите предложение с вышуеказанными фамилиями  " << endl;
getline(cin, sentence);
sentence[0] = toupper(sentence[0]);
for (int i = 0; sentence[i] != '\0'; ++i) {
    if (sentence[i] == '.') {
        sentence[i + 1] = toupper(sentence[i + 1]);
    }
}
cout << sentence << endl;
for (int i = 0;i < 5;i++) {
    lowercase[i] = students[i];
    cout << lowercase[i] << endl;
}
for (int i = 0;i < 5;i++) {
    transform(students[i].begin(), students[i].end(), 
students[i].begin(), tolower);
}
for (int i = 0;i < 5;i++) {
    sentence.replace(sentence.find(students[i]), students[i].length(), 
lowercase[i]);
} cout << sentence << endl;
}
Answer 1

Дело в std :: string :: find. Если в строке нет students[i], то она возвращает std::string::npos. Это можно исправить, добавив проверку:

if (sentence.find(students[i]) != string::npos) 

Также, по-моему, у вас перепутаны массивы students, lowercase

Потому что students[i] не находятся в sentence. Предлагаю вам разобраться, что хранится в students и исправить последний цикл так:

for (int i = 0; i < 5; i++) {
        if (sentence.find(students[i]) != string::npos) 
            sentence.replace(sentence.find(students[i]), students[i].length(), lowercase[i]);
    }
READ ALSO
Реализация Singleton в С++

Реализация Singleton в С++

Функция, которая возвращает singleton:

134
Почему stof округляет значение до целых?

Почему stof округляет значение до целых?

В файле запись Percent:0500 код ниже выводит 0

156
не устанавливается gluon plugin

не устанавливается gluon plugin

еще до сноса старой версии eclipse (она же как бы и новая) gluon устанавливалась (через market place) и работала нормально но в новой версии eclipse у меня...

146
Как отсортировать JSONArray по ключу в JSONObject?

Как отсортировать JSONArray по ключу в JSONObject?

Получаю такого вида JSONArray:

204