Как удалить слово из vector, которое имеют удвоения букв (C++)
Мне нужно написать програму которая будет копировать все слова и удалять слова, которое имеет удвоения букв. Не понимаю как мне доступится к словам вектора, чтобы правильно написать это.
Например: MMy name is Romaan Slabinoga, I'm from lviv.
Должно получиться вот так: name is Slabinoga, I'm from lviv.
То есть удалить слова "MMy" и "Romaan"
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <iterator>
#include <vector>
using namespace std;
int main() {
string input;
set<string> dictionary;
// new
vector<string> vecOfStr;
string str;
//
ifstream fin;
fin.open("out.txt");
// open file
while (getline(fin, str)) {
// new
if (str.size() > 0) {
vecOfStr.push_back(str);
}
}
for (int q = 0; q < vecOfStr.size(); q++)
{
string theCurrentWord = vecOfStr[q];
for (int i = 0; i <= theCurrentWord.length(); i++) {
if (theCurrentWord[i] == theCurrentWord[i + 1])
{
vecOfStr.erase(vecOfStr.begin() + q); // <-- ошибка здесь
}
else
{
q++;
}
}
}
unsigned int vector_size = vecOfStr.size();
for (int i = 0; i < vector_size; i++) {
cout << vecOfStr[i] << endl;
}
fin.close();
}
Заранее спасибо!
Ответы (1 шт):
Если вы нашли две повторяющие буквы в слове:
if (theCurrentWord[i] == theCurrentWord[i + 1])
то вы удаляете это слово из вектора. И продолжаете проверять это же слово, и если в нем опять будут повторяющие буквы, то вы уже удалите не то слово.
Вам нужно как только вы удалили элемент из вектора, сразу приступать к следующему слову (break)
Но тут еще одна проблема будет, если вы удалили слово под индексом q, то следующее слово в векторе будет иметь тоже индекс q, то есть вы перейдя на q++ пропустите одно слово, в общем вам надо уменьшать q, когда вы удалили слово из вектора.
И максимально не понятно зачем вы пишите:
else q++;
То есть если рядом стоящие буквы не равны, то вы увеличиваете индекс отвечающий за рассматриваемое слово.
Еще есть ошибка во внутреннем цикле. При i = 0; i <= theCurrentWord.length() будет ошибка, выход за пределы массива. В вашем случае нужно идти от 0, до theCurrentWord.length() - 1 не включительно.
Может есть еще ошибки, я не запускал ваш код, но сразу скажу, что проще просто сделать новый вектор в который вы будете добавлять нужные вам слова и пропускать ненужные.
