Как удалить слово из 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 не включительно.

Может есть еще ошибки, я не запускал ваш код, но сразу скажу, что проще просто сделать новый вектор в который вы будете добавлять нужные вам слова и пропускать ненужные.

→ Ссылка