fork(1) download
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Test
  5. {
  6. private static void SplitAndPrint(string prefix, string s) {
  7. s = s.Trim();
  8. while (s.Length > 0 && s[0] == '(' && s[s.Length - 1] == ')') {
  9. s = s.Substring(1, s.Length - 2);
  10. prefix += " ";
  11. }
  12. var parts = new List<string>();
  13. var parenLevel = 0;
  14. var lastPos = 0;
  15. for (var i = 0 ; i != s.Length ; i++) {
  16. switch (s[i]) {
  17. case '(':
  18. parenLevel++;
  19. break;
  20. case ')':
  21. parenLevel--;
  22. if (parenLevel < 0) {
  23. throw new ArgumentException();
  24. }
  25. break;
  26. case ',':
  27. if (parenLevel == 0) {
  28. parts.Add(s.Substring(lastPos, i-lastPos));
  29. lastPos = i + 1;
  30. }
  31. break;
  32. }
  33. }
  34. if (lastPos != s.Length) {
  35. parts.Add(s.Substring(lastPos, s.Length - lastPos));
  36. }
  37. if (parts.Count == 1) {
  38. Console.WriteLine("{0}{1}", prefix, parts[0]);
  39. return;
  40. }
  41. prefix += " ";
  42. foreach (var part in parts) {
  43. SplitAndPrint(prefix, part);
  44. }
  45. }
  46.  
  47. public static void Main()
  48. {
  49. SplitAndPrint("", "value1,value2,(value3,(value4, value5, value6, (value7), value8),(((value9),value10),value11))");
  50. }
  51. }
Success #stdin #stdout 0.04s 24024KB
stdin
Standard input is empty
stdout
  value1
  value2
      value3
          value4
          value5
          value6
            value7
          value8
                value9
              value10
          value11