Задать вопрос
@im_dimas

Поиск и замена текста на указанный?

Доброй ночи!

С++ знаю на уровне новичка, помогите написать код, который решил бы данную ниже задачу:
Имеется строка, и массив, например,

Строка 2: "aaa111 aaa55 bb777"

Нужно проверить строку на соответствие трём регулярным выражениям. Не знаю как еще объяснить, у меня поздняя ночь, мысли путаются.
Короче говоря, в массиве ключ будет означать регулярное выражение, а значение ключа - строка на которую в строке 2 будет заменяться текст.

Дополню
Надо было сразу так объяснить, но это для тех, кто знает php.
В общем, проще говоря, этот код нужно переделать на c++

$string = 'The quick brown fox jumps over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
NIKITF
@NIKITF
Knows Russian language
Здравствуйте.
Предлагаю свой вариант решения:

#include<iostream>
#include<string>
#include<vector>
#include<sstream>
using namespace std;
void reptiliod(string &two, vector<string>& replacements,
	vector<string>&patterns, unsigned&f, string&templ)
{
	stringstream inp; inp << two; two.clear(); 
	while (inp >> templ)
	{
		if (templ == patterns[f])
		{
			two += replacements[f++] + " ";
		}
		else
		{
			two += templ + " ";
		}
	}
}
int main()
{
	string two; cout << "Enter input string: ";
	getline(cin, two); 
	vector<string> patterns;
	cout << "Enter the words you need to erase:" << endl;
	bool a = 0; unsigned f = 0; string templ;
	do
	{
		cout << "[" << f++ << "] word: "; cin >> templ;
		patterns.push_back(templ);
		cout << "Do you want to finish? "; cin >> templ;
		if (templ == "YES" || templ == "yes")
		{
			a = 1;
		}
		templ.clear();

	} while (!a); f = 0; a = 0;

	vector<string> replacements; 
	cout << "Enter the words you need to insert:" << endl;
	do
	{
		cout << "[" << f++ << "] word: "; cin >> templ;
		replacements.push_back(templ);
		cout << "Do you want to finish? "; cin >> templ;
		if (templ == "YES" || templ == "yes")
		{
			a = 1;
		}
		templ.clear();

	} while (!a); f = 0; templ.clear();

	reptiliod(two,replacements,patterns,f,templ);
	
	cout<< endl << two << endl;
	return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы