fork download
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <cstring>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <iomanip>
  7. using namespace std;
  8.  
  9. char* skipSpaces(char* str) {
  10. while (*str != '\0' && *str == ' ') ++str;
  11. return str;
  12. }
  13.  
  14. char* isNextSymb(char* str, const char symb) {
  15. str = skipSpaces(str);
  16. if(*str == symb)
  17. return str;
  18. return NULL;
  19. }
  20.  
  21. char* getNameParam(char* str, char*& out_str) {
  22. char* s = isNextSymb(str, '\'');
  23.  
  24. if (s != NULL) {
  25. ++s;
  26. char* temp = strchr(s, '\'');
  27. if (temp == NULL) return NULL;
  28. out_str = (char*)malloc(temp - s + 1);
  29. char* n = out_str;
  30. while (*s != '\0' && *s != '\'') {
  31. *n = *s;
  32. ++n;
  33. ++s;
  34. }
  35.  
  36. if (*s == '\0')
  37. s = NULL;
  38.  
  39. *n = '\0';
  40. }
  41.  
  42. return s;
  43. }
  44.  
  45. char* isNumber(char* str) {
  46. str = skipSpaces(str);
  47. if (*str == '-') ++str;
  48. str = skipSpaces(str);
  49. while (*str != '\0' && *str >= '0' && *str <= '9') ++str;
  50. if (*str == '\0') return NULL;
  51. return str;
  52. }
  53.  
  54. char* getDataParam(char* str, int& a, int& b) {
  55. char* s = isNextSymb(str, '[');
  56. if (s != NULL) {
  57. a = atoi(s + 1);
  58. s = isNumber(s + 1);
  59. if (s != NULL) {
  60. s = isNextSymb(s, '&');
  61. if (s != NULL) {
  62. b = atoi(s + 1);
  63. s = isNumber(s + 1);
  64. if (s != NULL)
  65. return (s = isNextSymb(s, ']'));
  66. }
  67. }
  68. }
  69. return NULL;
  70. }
  71.  
  72. struct Param {
  73. char* name;
  74. int a1;
  75. int b1;
  76. int a2;
  77. int b2;
  78. };
  79.  
  80. char* getParam(char* str, Param& par) {
  81. char* s = isNextSymb(str, '{');
  82. if (s != NULL) {
  83. s = getNameParam(str + 1, par.name);
  84. if (s != NULL) {
  85. s = isNextSymb(s + 1, ';');
  86. if (s != NULL) {
  87. s = getDataParam(s + 1, par.a1, par.b1);
  88. if (s != NULL) {
  89. s = isNextSymb(s + 1, ';');
  90. if (s != NULL) {
  91. s = getDataParam(s + 1, par.a2, par.b2);
  92. if (s != NULL)
  93. return (s = isNextSymb(s + 1, '}'));
  94. }
  95. }
  96. }
  97. }
  98. }
  99. return NULL;
  100. }
  101.  
  102. int main() {
  103.  
  104. char* str = (char*)" { 'Parametr1 2000' ; [ 5 & 2 ] ; [ 3 & 2 ] }{ 'ParametrLoooooooong 2021';[10&5];[ 6 &4]}";
  105. Param params[10];
  106. int count = 0;
  107. char* s = str;
  108.  
  109. do{
  110. s = strchr(s, '{');
  111. if (s == NULL) break;
  112.  
  113. char* temp = getParam(s, params[count]);
  114.  
  115. if (temp != NULL) {
  116. cout << "str " << count + 1 << " " << params[count].name << " " << params[count].a1 <<
  117. " " << params[count].b1 << " " << params[count].a2 << " " << params[count].b2 << endl;
  118. ++count;
  119. }
  120. else
  121. cout << "Error str\n";
  122. ++s;
  123. } while (s != NULL);
  124.  
  125. return 0;
  126. }
Success #stdin #stdout 0s 4704KB
stdin
Standard input is empty
stdout
str 1 Parametr1 2000 5 2 3 2
str 2 ParametrLoooooooong 2021 10 5 6 4