Выдает ошибку 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;
}
Дело в 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]);
}
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
еще до сноса старой версии eclipse (она же как бы и новая) gluon устанавливалась (через market place) и работала нормально но в новой версии eclipse у меня...