Exemplo n.º 1
0
 public static string process(string s)
 {
     Stack tags = new Stack(100),
           temp = new Stack(100);
     string tag = "",
            word = "",
            result = "";
     bool state = false;
     int i;
     for (i = 0; i < s.Length; i++) {
         if (s[i] == '<') {
             state = true;
             if (word != "") {
                 while ((tag = tags.Pop()) != null) {
                     word = operation(tag, word);
                     temp.Push(tag);
                 }
                 while ((tag = temp.Pop()) != null)
                     tags.Push(tag);
                 result += word;
             }
             word = "";
             tag += s[i];
         } else if (state && s[i] == '>') {
             tag += s[i];
             if (tag[1] == '/') {
                 if (tags.IsEmpty()) // >pop yapıyorsun ama stack boş.
                     return "";
                 if (balance(tags.Peek(), tag)) {
                     tags.Pop();
                 } else // >pop yapılan elaman ile özdeş değil.
                     return "";
             } else
                 tags.Push(tag);
             tag = "";
             state = false;
         } else if (state)
             tag += s[i];
         else
             word += s[i];
     }
     result += word;
     if (!tags.IsEmpty()) // >hala item var o yüzden hatalı.
         return "";
     return result;
 }