fork(1) download
  1. #include <stdio.h>
  2.  
  3. const int max_string_length = 256;
  4.  
  5. enum WORK_STATE
  6. {
  7. WORK_STATE_FIND_NAME,
  8. WORK_STATE_READ_NAME,
  9. WORK_STATE_READ_ARG
  10. };
  11.  
  12. void work(const char const *inp)
  13. {
  14. char buffer[max_string_length];
  15. int buffer_size;
  16. enum WORK_STATE state = WORK_STATE_FIND_NAME;
  17. int brackets_found, arg_start;
  18.  
  19. for (int i = 0; i < max_string_length && inp[i] > 0; ++i)
  20. {
  21. switch (state)
  22. {
  23. case WORK_STATE_FIND_NAME:
  24.  
  25. if (
  26. (inp[i] >= 'A' && inp[i] <= 'Z') ||
  27. (inp[i] >= 'a' && inp[i] <= 'z')
  28. ) {
  29. buffer_size = 0;
  30. buffer[buffer_size++] = inp[i];
  31. state = WORK_STATE_READ_NAME;
  32. }
  33. break;
  34.  
  35. case WORK_STATE_READ_NAME:
  36.  
  37. if (
  38. (inp[i] >= 'A' && inp[i] <= 'Z') ||
  39. (inp[i] >= 'a' && inp[i] <= 'z') ||
  40. (inp[i] >= '0' && inp[i] <= '9')
  41. ) {
  42. buffer[buffer_size++] = inp[i];
  43. }
  44. else if (inp[i] == '(')
  45. {
  46. buffer[buffer_size++] = inp[i];
  47. arg_start = buffer_size;
  48. brackets_found = 1;
  49. state = WORK_STATE_READ_ARG;
  50. }
  51. else
  52. {
  53. state = WORK_STATE_FIND_NAME;
  54. }
  55. break;
  56.  
  57. case WORK_STATE_READ_ARG:
  58.  
  59. if (inp[i] == '(')
  60. {
  61. brackets_found += 1;
  62. }
  63. else if (inp[i] == ')')
  64. {
  65. brackets_found -= 1;
  66. if (brackets_found == 0)
  67. {
  68. buffer[buffer_size] = 0;
  69. work(buffer + arg_start);
  70. state = WORK_STATE_FIND_NAME;
  71. }
  72. }
  73.  
  74. buffer[buffer_size++] = inp[i];
  75.  
  76. if (state == WORK_STATE_FIND_NAME)
  77. {
  78. buffer[buffer_size] = 0;
  79. puts(buffer);
  80. }
  81.  
  82. break;
  83. }
  84. }
  85. };
  86.  
  87. int main(void)
  88. {
  89. char input[max_string_length];
  90. while (!feof(stdin) && fgets(input, max_string_length, stdin))
  91. {
  92. work(input);
  93. }
  94. return 0;
  95. }
  96.  
Success #stdin #stdout 0s 9416KB
stdin
one two 12AAA(CCC(C1_1);A1_1;DDD(145))dfg 
dfgdfgdfg,BBB(B1_1; CCC(C1_1); B1_2) sfsgndf 
dfgnhjdfglkjdfg DDD(D1_1)
CCC()

one two 12AAA(CCC(C1_1; DDD(D1_1));A1_1)dfg 
stdout
CCC(C1_1)
DDD(145)
AAA(CCC(C1_1);A1_1;DDD(145))
CCC(C1_1)
BBB(B1_1; CCC(C1_1); B1_2)
DDD(D1_1)
CCC()
DDD(D1_1)
CCC(C1_1; DDD(D1_1))
AAA(CCC(C1_1; DDD(D1_1));A1_1)