Как в предложении удалить слова имеющие символы «ma» и «ov»?

В предложении нужно удалить слова имеющие символы «ma» и «ob».

Вот то, что смог:

#include <cstring>

using namespace std;

int main()
{
    char s[200];
    cout<<"Enter your text: ";
    cin.getline(s,200); int m_id, a_id;

    for(int i = 0; i < strlen(s)+1; i++){
        if( s[i]=='m'){
            if(s [i+1] == 'a'){
                m_id = i; a_id=i+1;
            }
        }
    }

    return 0;
}

дальше хотел найти с помощью цикла назад и вперед начало и конец слова, т.е. до пробела или последнего элемента массива '\0', но не получается...


Ответы (1 шт):

Автор решения: Ayrat Arifullin

Был использован такой прекрасный инструмент языка С++ STL

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <iterator>

std::vector<std::string> getLexemesFromString(const std::string& text) {
    std::istringstream       stream_line(text);
    return std::vector<std::string>(std::istream_iterator<std::string>(stream_line),
                                    std::istream_iterator<std::string>());
}

std::vector<std::string> removeWordsWithPart(const std::vector<std::string>& lexemes, const std::string& part) {
    std::vector<std::string> result;

    std::copy_if(lexemes.begin(), lexemes.end(), std::back_inserter(result), [&part](const std::string& lexem){
        auto it = std::search(lexem.begin(), lexem.end(), part.begin(), part.end());
        return it == lexem.end();
    });

    return result;
}

void outputLexemes(const std::vector<std::string>& lexemes) {
    std::copy(lexemes.begin(), lexemes.end(), std::ostream_iterator<std::string>(std::cout, " "));
}

int main()
{
    std::string input = "maven oven jojo tekken";

    outputLexemes(removeWordsWithPart(removeWordsWithPart(getLexemesFromString(input), "ma"), "ov"));

    return 0;
}
→ Ссылка