#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;
char* skipSpaces(char* str) {
while (*str != '\0' && *str == ' ') ++str;
return str;
}
char* isNextSymb(char* str, const char symb) {
str = skipSpaces(str);
if(*str == symb)
return str;
return NULL;
}
char* getNameParam(char* str, char*& out_str) {
char* s = isNextSymb(str, '\'');
if (s != NULL) {
++s;
char* temp = strchr(s, '\'');
if (temp == NULL) return NULL;
out_str = (char*)malloc(temp - s + 1);
char* n = out_str;
while (*s != '\0' && *s != '\'') {
*n = *s;
++n;
++s;
}
if (*s == '\0')
s = NULL;
*n = '\0';
}
return s;
}
char* isNumber(char* str) {
str = skipSpaces(str);
if (*str == '-') ++str;
str = skipSpaces(str);
while (*str != '\0' && *str >= '0' && *str <= '9') ++str;
if (*str == '\0') return NULL;
return str;
}
char* getDataParam(char* str, int& a, int& b) {
char* s = isNextSymb(str, '[');
if (s != NULL) {
a = atoi(s + 1);
s = isNumber(s + 1);
if (s != NULL) {
s = isNextSymb(s, '&');
if (s != NULL) {
b = atoi(s + 1);
s = isNumber(s + 1);
if (s != NULL)
return (s = isNextSymb(s, ']'));
}
}
}
return NULL;
}
struct Param {
char* name;
int a1;
int b1;
int a2;
int b2;
};
char* getParam(char* str, Param& par) {
char* s = isNextSymb(str, '{');
if (s != NULL) {
s = getNameParam(str + 1, par.name);
if (s != NULL) {
s = isNextSymb(s + 1, ';');
if (s != NULL) {
s = getDataParam(s + 1, par.a1, par.b1);
if (s != NULL) {
s = isNextSymb(s + 1, ';');
if (s != NULL) {
s = getDataParam(s + 1, par.a2, par.b2);
if (s != NULL)
return (s = isNextSymb(s + 1, '}'));
}
}
}
}
}
return NULL;
}
int main() {
char* str = (char*)" { 'Parametr1 2000' ; [ 5 & 2 ] ; [ 3 & 2 ] }{ 'ParametrLoooooooong 2021';[10&5];[ 6 &4]}";
Param params[10];
int count = 0;
char* s = str;
do{
s = strchr(s, '{');
if (s == NULL) break;
char* temp = getParam(s, params[count]);
if (temp != NULL) {
cout << "str " << count + 1 << " " << params[count].name << " " << params[count].a1 <<
" " << params[count].b1 << " " << params[count].a2 << " " << params[count].b2 << endl;
++count;
}
else
cout << "Error str\n";
++s;
} while (s != NULL);
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNoYXIqIHNraXBTcGFjZXMoY2hhciogc3RyKSB7CiAgICB3aGlsZSAoKnN0ciAhPSAnXDAnICYmICpzdHIgPT0gJyAnKSArK3N0cjsKICAgIHJldHVybiBzdHI7Cn0KIApjaGFyKiBpc05leHRTeW1iKGNoYXIqIHN0ciwgY29uc3QgY2hhciBzeW1iKSB7CiAgICBzdHIgPSBza2lwU3BhY2VzKHN0cik7CiAgICBpZigqc3RyID09IHN5bWIpCiAgICAgICAgcmV0dXJuIHN0cjsKICAgIHJldHVybiBOVUxMOwp9CiAKY2hhciogZ2V0TmFtZVBhcmFtKGNoYXIqIHN0ciwgY2hhciomIG91dF9zdHIpIHsKICAgIGNoYXIqIHMgPSBpc05leHRTeW1iKHN0ciwgJ1wnJyk7CiAKICAgIGlmIChzICE9IE5VTEwpIHsKICAgICAgICArK3M7CiAgICAgICAgY2hhciogdGVtcCA9IHN0cmNocihzLCAnXCcnKTsKICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKICAgICAgICBvdXRfc3RyID0gKGNoYXIqKW1hbGxvYyh0ZW1wIC0gcyArIDEpOwogICAgICAgIGNoYXIqIG4gPSBvdXRfc3RyOwogICAgICAgIHdoaWxlICgqcyAhPSAnXDAnICYmICpzICE9ICdcJycpIHsKICAgICAgICAgICAgKm4gPSAqczsKICAgICAgICAgICAgKytuOwogICAgICAgICAgICArK3M7CiAgICAgICAgfQogCiAgICAgICAgaWYgKCpzID09ICdcMCcpCiAgICAgICAgICAgIHMgPSBOVUxMOwogCiAgICAgICAgKm4gPSAnXDAnOwogICAgfQogCiAgICByZXR1cm4gczsKfQogCmNoYXIqIGlzTnVtYmVyKGNoYXIqIHN0cikgewogICAgc3RyID0gc2tpcFNwYWNlcyhzdHIpOwogICAgaWYgKCpzdHIgPT0gJy0nKSArK3N0cjsKICAgIHN0ciA9IHNraXBTcGFjZXMoc3RyKTsKICAgIHdoaWxlICgqc3RyICE9ICdcMCcgJiYgKnN0ciA+PSAnMCcgJiYgKnN0ciA8PSAnOScpICsrc3RyOwogICAgaWYgKCpzdHIgPT0gJ1wwJykgcmV0dXJuIE5VTEw7CiAgICByZXR1cm4gc3RyOwp9CiAKY2hhciogZ2V0RGF0YVBhcmFtKGNoYXIqIHN0ciwgaW50JiBhLCBpbnQmIGIpIHsKICAgIGNoYXIqIHMgPSBpc05leHRTeW1iKHN0ciwgJ1snKTsKICAgIGlmIChzICE9IE5VTEwpIHsKICAgICAgICBhID0gYXRvaShzICsgMSk7CiAgICAgICAgcyA9IGlzTnVtYmVyKHMgKyAxKTsKICAgICAgICBpZiAocyAhPSBOVUxMKSB7CiAgICAgICAgICAgIHMgPSBpc05leHRTeW1iKHMsICcmJyk7CiAgICAgICAgICAgIGlmIChzICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgIGIgPSBhdG9pKHMgKyAxKTsKICAgICAgICAgICAgICAgIHMgPSBpc051bWJlcihzICsgMSk7CiAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAocyA9IGlzTmV4dFN5bWIocywgJ10nKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gTlVMTDsKfQogCnN0cnVjdCBQYXJhbSB7CiAgICBjaGFyKiBuYW1lOwogICAgaW50IGExOwogICAgaW50IGIxOwogICAgaW50IGEyOwogICAgaW50IGIyOwp9OwogCmNoYXIqIGdldFBhcmFtKGNoYXIqIHN0ciwgUGFyYW0mIHBhcikgewogICAgY2hhciogcyA9IGlzTmV4dFN5bWIoc3RyLCAneycpOwogICAgaWYgKHMgIT0gTlVMTCkgewogICAgICAgIHMgPSBnZXROYW1lUGFyYW0oc3RyICsgMSwgcGFyLm5hbWUpOwogICAgICAgIGlmIChzICE9IE5VTEwpIHsKICAgICAgICAgICAgcyA9IGlzTmV4dFN5bWIocyArIDEsICc7Jyk7CiAgICAgICAgICAgIGlmIChzICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgIHMgPSBnZXREYXRhUGFyYW0ocyArIDEsIHBhci5hMSwgcGFyLmIxKTsKICAgICAgICAgICAgICAgIGlmIChzICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICBzID0gaXNOZXh0U3ltYihzICsgMSwgJzsnKTsKICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnZXREYXRhUGFyYW0ocyArIDEsIHBhci5hMiwgcGFyLmIyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocyA9IGlzTmV4dFN5bWIocyArIDEsICd9JykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBOVUxMOwp9CiAKaW50IG1haW4oKSB7CiAKICAgIGNoYXIqIHN0ciA9IChjaGFyKikiIHsgJ1BhcmFtZXRyMSAyMDAwJyA7IFsgNSAmIDIgXSA7IFsgMyAmIDIgXSB9eyAnUGFyYW1ldHJMb29vb29vb29uZyAyMDIxJztbMTAmNV07WyA2ICY0XX0iOwogICAgUGFyYW0gcGFyYW1zWzEwXTsKICAgIGludCBjb3VudCA9IDA7CiAgICBjaGFyKiBzID0gc3RyOwogCiAgICBkb3sKICAgICAgICBzID0gc3RyY2hyKHMsICd7Jyk7CiAgICAgICAgaWYgKHMgPT0gTlVMTCkgYnJlYWs7CiAKICAgICAgICBjaGFyKiB0ZW1wID0gZ2V0UGFyYW0ocywgcGFyYW1zW2NvdW50XSk7CiAKICAgICAgICBpZiAodGVtcCAhPSBOVUxMKSB7CiAgICAgICAgICAgIGNvdXQgPDwgInN0ciAiIDw8IGNvdW50ICsgMSA8PCAiICIgPDwgcGFyYW1zW2NvdW50XS5uYW1lIDw8ICIgIiA8PCBwYXJhbXNbY291bnRdLmExIDw8IAogICAgICAgICAgICAiICIgPDwgcGFyYW1zW2NvdW50XS5iMSA8PCAiICIgPDwgcGFyYW1zW2NvdW50XS5hMiA8PCAiICIgPDwgcGFyYW1zW2NvdW50XS5iMiA8PCBlbmRsOwogICAgICAgICAgICArK2NvdW50OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIGNvdXQgPDwgIkVycm9yIHN0clxuIjsKICAgICAgICArK3M7CiAgICB9IHdoaWxlIChzICE9IE5VTEwpOwogCiAgICByZXR1cm4gMDsKfQ==