Ошибка в 17 строке. Я уже на компилятор Code Blocks грешу (постоянно перлы выдает).
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<string> words; //создаю вектор со словами
for (string word; cin>>word; ) //считываю слова
words.push_back(word); //записываю каждое считанное слово в конец вектора
vector<string> bleep; //создаю второй вектор с нежелательными словами
bleep[0]="indian"; //инициализирую первое слово вектора
bleep[1]="bydlo"; //инициализирую второе слово вектора
bleep[2]="microsoft"; //инициализирую третее слово вектора
for (int i=0; i<words.size(); ++i) //создаю цикл, выполняемый то количество раз, сколько пользователь ввел слов в первый вектор
if (words[i]!=bleep[0] && words[i]!=bleep[1] && words[i]!=bleep[2]) //проверяю, является ли каждое последующее слово первого вектора нежелательным, путем поочередного сравнения его с каждым нежелательным словом второго вектора
cout << words[i] << "\n"; //в случае не совпадения его с нежелательным словом, вывожу проверяемое слово
else
cout << "BLEEP\n"; //в случае совпадения, заменяю проверяемое слово словом BLEEP, как нежелательное
}
Ваша программа делает запись в вектор по индексам, выходящим за пределы вектора
vector<string> bleep;
bleep[0]="indian";
...
К процитированному предупреждению эта проблема не имеет никакого отношения.
Либо сразу создавайте вектор с необходимым количеством элементов
vector<string> bleep(3);
либо используйте push_back
вместо оператора []
.
Похоже, на это ругается?
i < words.size()
Ну так все верно, i
у вас знаковый int
, а words.size()
- это беззнаковый тип size_t
.
Вот компилятор и предупреждает (warning - это еще не ошибка, но прислушиваться и понимать, что компилятору не нравится, нужно в любом случае) - во избежание недоразумений - что вы сравниваете знаковое и беззнаковое значение.
Обычно это сравнение не выливается ни во что страшное :), но чисто теоретически выполнение преобразования для сравнения может привести к неожиданному результату.
Update
Вот рабочий код:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> words; //создаю вектор со словами
for (string word; cin >> word; ) //считываю слова
words.push_back(word); //записываю каждое считанное слово в конец вектора
vector<string> bleep(3); //создаю второй вектор с нежелательными словами
bleep[0]="indian"; //инициализирую первое слово вектора
bleep[1]="bydlo"; //инициализирую второе слово вектора
bleep[2]="microsoft"; //инициализирую третее слово вектора
for (size_t i = 0; i < words.size(); ++i) //создаю цикл, выполняемый то количество раз, сколько пользователь ввел слов в первый вектор
if (words[i]!=bleep[0] &&
words[i]!=bleep[1] &&
words[i]!=bleep[2]) // проверяю, является ли каждое последующее слово первого вектора нежелательным,
// путем поочередного сравнения его с каждым нежелательным словом второго вектора
cout << words[i] << "\n"; //в случае не совпадения его с нежелательным словом, вывожу проверяемое слово
else
cout << "BLEEP\n"; //в случае совпадения, заменяю проверяемое слово словом BLEEP, как нежелательное
}
Но я бы все же делал так:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
const vector<string> bleep{"indian","bydlo","microsoft"};
string word;
while(cin >> word)
cout << (find(bleep.begin(),bleep.end(),word) ==
bleep.end() ? word : "BLEEP") << "\n";
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
При наведении на содержимое ссылки (к примеру, "Ссылка 1") она должна поменяться на значение атрибута href в круглых скобках (была "Ссылка 1", а стала...
Нужно перебрать объект с изображениями, добавляя css стили,css() не подойдет так как нужно учитывать высоту каждого отдельно элемента