Advertisement
fensa08

#APS Lab 2/5

Nov 9th, 2019
1,092
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.29 KB | None | 0 0
  1. Модифициран XML код Problem 2 (0 / 0)
  2.  
  3. Даден е некој модифициран XML код. Модифицираниот XML код ги користи симболите '[' и ']', за отварање и затворање на таг, соодветно, наместо стандардните '
  4.  
  5. ' и '>'. Треба да се провери дали сите тагови во кодот се правилно вгнездени (дали кодот е валиден) т.е. дали секој отворен таг има соодветен затворен таг со истото име на соодветното место во кодот. За поедноставување, дадено е дека секој отворен таг мора да има свој затворен таг и дека таговите немаат атрибути.
  6.  
  7. На влез е даден бројот на редови во кодот и самиот XML со секој таг во посебен ред, а на излез треба да се испечати 1 или 0 за валиден или невалиден код, соодветно.
  8.  
  9. Објаснување: Во модифицираниот XML код секој отворен таг е во облик [imeNaTag], а соодветниот затворен таг е во облик [/imeNaTag].
  10.  
  11. Пример за правилно вгнездени тагови во XML e:
  12.  
  13. [tag1]
  14. [tag2]
  15. Podatok
  16. [/tag2]
  17. [/tag1]
  18.  
  19. Пример за неправилно вгнездени тагови во XML e:
  20.  
  21. [tag1]
  22. [tag2]
  23. Podatok
  24. [/tag1]
  25. [/tag2]
  26.  
  27. Име на класата (Java): CheckXML
  28.  
  29.  
  30. ====================================================================================================================================
  31.  
  32. import java.io.BufferedReader;
  33. import java.io.InputStreamReader;
  34. import java.util.NoSuchElementException;
  35.  
  36. public class CheckXML {
  37.  
  38.     static class SLLNode<E> {
  39.         protected E element;
  40.         protected SLLNode<E> succ;
  41.  
  42.         public SLLNode(E elem, SLLNode<E> succ) {
  43.             this.element = elem;
  44.             this.succ = succ;
  45.         }
  46.  
  47.         @Override
  48.         public String toString() {
  49.             return element.toString();
  50.         }
  51.     }
  52.  
  53.  
  54.     static interface Stack<E> {
  55.  
  56.         // Elementi na stekot se objekti od proizvolen tip.
  57.  
  58.         // Metodi za pristap:
  59.  
  60.         public boolean isEmpty ();
  61.         // Vrakja true ako i samo ako stekot e prazen.
  62.  
  63.         public E peek ();
  64.         // Go vrakja elementot na vrvot od stekot.
  65.  
  66.         // Metodi za transformacija:
  67.  
  68.         public void clear ();
  69.         // Go prazni stekot.
  70.  
  71.         public void push (E x);
  72.         // Go dodava x na vrvot na stekot.
  73.  
  74.         public E pop ();
  75.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  76.     }
  77.  
  78.     static class LinkedStack<E> implements Stack<E> {
  79.  
  80.         //Stekot e pretstaven na sledniot nacin: top e link do prviot jazol
  81.         // na ednostrano-povrzanata lista koja sodrzi gi elementite na stekot .
  82.         private SLLNode<E> top;
  83.  
  84.         public LinkedStack () {
  85.             // Konstrukcija na nov, prazen stek.
  86.             top = null;
  87.         }
  88.  
  89.         public boolean isEmpty () {
  90.             // Vrakja true ako i samo ako stekot e prazen.
  91.             return (top == null);
  92.         }
  93.  
  94.         public E peek () {
  95.             // Go vrakja elementot na vrvot od stekot.
  96.             if (top == null)
  97.                 throw new NoSuchElementException();
  98.             return top.element;
  99.         }
  100.  
  101.         public void clear () {
  102.             // Go prazni stekot.
  103.             top = null;
  104.         }
  105.  
  106.         public void push (E x) {
  107.             // Go dodava x na vrvot na stekot.
  108.             top = new SLLNode<E>(x, top);
  109.         }
  110.  
  111.         public E pop () {
  112.             // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  113.             if (top == null)
  114.                 throw new NoSuchElementException();
  115.             E topElem = top.element;
  116.             top = top.succ;
  117.             return topElem;
  118.         }
  119.  
  120.     }
  121.  
  122.     public static int checkValidity(String[] redovi){
  123.  
  124.         LinkedStack<String> stek = new LinkedStack<String>();
  125.         for(int i = 0; i < redovi.length; i++){
  126.  
  127.             if(redovi[i].charAt(0) == '['){
  128.                 // dali e zatvaracki - pop
  129.                 if(redovi[i].charAt(1) == '/'){
  130.                     String el = stek.pop();
  131.                     boolean b = redovi[i].endsWith(el.substring(1));
  132.                     if ( b == false){
  133.                         return 0;
  134.                     }
  135.                 }else{
  136.                     stek.push(redovi[i]);
  137.                 }
  138.             }
  139.  
  140.  
  141.         }
  142.  
  143.         return 1;
  144.     }
  145.  
  146.  
  147.     public static void main(String[] args) throws Exception{
  148.  
  149.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  150.         String s = br.readLine();
  151.         int n = Integer.parseInt(s);
  152.         String [] redovi = new String[n];
  153.  
  154.         for(int i=0;i<n;i++)
  155.             redovi[i] = br.readLine();
  156.  
  157.         int valid = checkValidity(redovi);
  158.  
  159.         // Vasiot kod tuka
  160.         // Moze da koristite dopolnitelni funkcii ako vi se potrebni
  161.  
  162.         System.out.println(valid);
  163.  
  164.         br.close();
  165.     }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement