fork download
  1. #include<cstdio>
  2. #include<cctype>
  3. #include<cstring>
  4. #include<cstdlib>
  5. //vypise vnorenia
  6.  
  7. void vypis_vnorenia(FILE * test,int pocet){
  8. for (int i = 0; i < pocet; i++){
  9. fprintf(test," ");
  10. }
  11. }
  12.  
  13.  
  14. int pocet_medzier_pred_prvym_pismenom(char * buf){
  15. int c = 0;
  16. while (c < strlen(buf)){
  17. if (isspace(buf[c]) == 0){//nacly sme prvy nebiely
  18. return c;
  19. }
  20. c++;
  21. }
  22. return c; //ak vrati streln(buf) znamena to ze retazec je cely biely
  23. }
  24.  
  25.  
  26. int main(){
  27. FILE * test = stdout;
  28. //test = fopen("test.txt", "w");
  29. int pocet_riadkov[10];
  30. int najvacsie_vnorenie = 0;
  31. char buf[102]; //preto aby sme mohli testovat dlzku riadku lebo ked retazec dlzka bude 101 tak potom dam ERR_len
  32. int vnorenie = 0;
  33. int zvacsit = 0;
  34. for (int i = 0; i < 10; i++){
  35. pocet_riadkov[i] = 0;
  36. }
  37.  
  38. while (fgets(buf, 102, stdin))
  39. {
  40.  
  41. //tu chekujeme chyby ci nenastali
  42. if (strlen(buf) > 100){
  43. fprintf(test,"ERR LENGTH\n");
  44. exit(0);
  45. }
  46. if (vnorenie >= 10){
  47. fprintf(test,"ERR LEVEL\n");
  48. exit(0);
  49. }
  50. if (vnorenie < 0){
  51. fprintf(test,"ERR BRACE\n");
  52. exit(0);
  53. }
  54. int pocet_blielych = pocet_medzier_pred_prvym_pismenom(buf); // pocet bielych znakov pred prvym nebielym znakom
  55.  
  56. if (pocet_blielych == strlen(buf)){
  57. fprintf(test,"\n");
  58. continue;//vypis bez bielych a pokracuj
  59. }
  60. //teraz vieme ze tam aspon jeden nebiely znak
  61. if (buf[pocet_blielych] == '}'){
  62. //prvy znak je uzavreta, takze znizime uroven vnorenia
  63. vnorenie--;
  64. }
  65. if (vnorenie < 0){
  66. fprintf(test, "ERR BRACE\n");
  67. exit(0);
  68. }
  69. for (int i = pocet_blielych; i < strlen(buf); i++){
  70. if (buf[i] == '{'){
  71. zvacsit++;
  72. }
  73. if (i > pocet_blielych && buf[i] == '}'){
  74. zvacsit--;
  75. }
  76. if (buf[i] == '/'){
  77. if ((i + 1) < strlen(buf)){
  78. if (buf[i + 1] == '/'){
  79. break; // ukoncime lebo tot su uz len komenty
  80. }
  81. }
  82. }
  83. }
  84. //teraz vypiseme medzery
  85. vypis_vnorenia(test,vnorenie);
  86. fprintf(test,"%s", buf + pocet_blielych);
  87.  
  88. pocet_riadkov[vnorenie]++;
  89. if (vnorenie > najvacsie_vnorenie){
  90. najvacsie_vnorenie = vnorenie;
  91. }
  92.  
  93.  
  94. vnorenie = vnorenie + zvacsit;
  95. zvacsit = 0;
  96.  
  97. }
  98.  
  99.  
  100.  
  101.  
  102. //po cykle
  103. if (vnorenie != 0){
  104. fprintf(test,"ERR BRACE\n");
  105. exit(0);
  106. }
  107. //vypisem statistiku
  108. for (int i = 0; i < najvacsie_vnorenie + 1; i++){
  109. fprintf(test, "// LEVEL %d LINES %d\n", i, pocet_riadkov[i]);
  110. }
  111.  
  112.  
  113.  
  114.  
  115. return 0;
  116. }
  117.  
Success #stdin #stdout 0s 5316KB
stdin
// v tomto programe jedna uzatvaracia zatvorka chyba
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
cout << a[i][j]; }
stdout
// v tomto programe jedna uzatvaracia zatvorka chyba
for(int i=0; i<n; i++) {
    for(int j=0; j<n; j++) {
        cout << a[i][j]; }
ERR BRACE