Как в предложении удалить слова имеющие символы «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;
}