#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
// Объявляем переменные, в которые будут записываться данные
int a = 0;
int b = 0;
int c = 0;
// Объявляем "разборщик" строки в виде регулярного выражения. В данном случае мы говорим,
// что строка должна соответствовать формату "x=num", где x должно быть одним из символов
// 'a', 'b' или 'c' (паттерн [abc]), а num - последовательность из цифр (паттерн [\\d]+)
// Взятие паттернов в скобки означает, что мы хотим получить их в качестве результата разбора
std::regex parseRegex(R"(\s*([abc])\s*=\s*([+-]?\d+)\s*)");
std::smatch baseMatch;
for (;;)
{
// Читаем полную строку с консоли. Если пользователь ввёл "exit", то
// больше ничего не читаем.
std::string line;
std::getline(std::cin, line);
if (line == "exit")
break;
// Разбираем прочитанную строку с помощью регулярного выражения. Если
// строка не соответствует ожидаемому формату - сообщаем об этом.
if (!std::regex_match(line, baseMatch, parseRegex))
{
std::cout << "Can't match the string! Invalid string format." << std::endl;
continue;
}
// Если количество полученных результатов разбора меньше требуемого - также
// сообщаем об ошибке
if (baseMatch.size() != 3)
{
std::cout << "Invalid string format." << std::endl;
continue;
}
// Получаем результаты разбора
auto varName = baseMatch[1].str();
auto varValueStr = baseMatch[2].str();
// Конвертируем последовательность цифр в число
auto varValue = atoi(varValueStr.c_str());
// В зависимости от того, какое имя переменной ввели с консоли,
// присваиваем значение соответствующей переменной
if (varName == "a")
a = varValue;
else if (varName == "b")
b = varValue;
else if (varName == "c")
c = varValue;
// Для контроля выводим состояние переменных
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << "c = " << c << std::endl;
}
return 0;
}