ошибка: поиск имени «i» изменен для ISO «для» scoping [-fpermissive]

В. Напишите программу, которая «выдает» слова, которые вам не нравятся; то есть вы читаете словами cin и снова печатаете их на cout. Если слово входит в число определенных вами, вместо этого слова вы пишете BLEEP. (книга Страуструпа с ++)

Вот код, который я написал:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }
int main()
{
vector<string> disliked;
disliked.push_back("Broccoli");
disliked.push_back("Carrots");
disliked.push_back("Tomatoes");
disliked.push_back("Asparagus");

vector<string> words;
string word;
while (cin >> word) {
words.push_back(word);
}
for (int i = 0; i < words.size(); ++i) {
cout << words[i] << "\t";     //i used it to see if the program was working
}
for (int j = 0; j < disliked.size(); ++j) {
cout << disliked[j] << "\t";
}
for (i = 0; i < j; ++i) {
if (words[i] == disliked[j]) {
cout << "BLEEP";
}
else {
}
}
}

Я думаю, что проблема возникает из-за моего последнего цикла for, но я не понимаю, что делать.

Вот ошибка, которую я получил:

bleep.cpp: In function ‘int main()’:
bleep.cpp:27:8: error: name lookup of ‘i’ changed for ISO ‘for’ scoping [-fpermissive]
bleep.cpp:27:8: note: (if you use ‘-fpermissive’ G++ will accept your code)
bleep.cpp:27:19: error: name lookup of ‘j’ changed for ISO ‘for’ scoping [-fpermissive]

0

Решение

Проблема в:

for (i = 0; i < j; ++i) {
if (words[i] == disliked[j]) {
cout << "BLEEP";
}
else {
}
}

Здесь вы используете i а также j не объявляя их. Предыдущие объявления имеют только ту область блока, в которой вы декларируете. Либо вам нужно переопределить их, либо, если вы хотите использовать предыдущие значения, объявите их выше первого for петля.

9

Другие решения

Вы объявили переменную я а также J в цикле for, следовательно, из-за проблемы с областью действия вы не можете получить доступ к переменным в другом цикле for.

Из того, что я понял, в последнем цикле for вы проверяете, каждое ли слово в слова массив равен одному из слов в нелюбимое массив. Для этого вам нужно использовать два цикла for следующим образом:

for(int i=0; i<words.size(); i++){
for(int j=0; j<disliked.size(); j++){
if(words[i] == disliked[j]){
words[i] = "BLEEP";     //This step replaces the disliked word with "BLEEP"}
}
}

Примечание: если вы объявите int i,j; прежде чем использовать их в циклах, вам не нужно объявлять их снова внутри циклов for.

4

По вопросам рекламы [email protected]