protected static string bicimlendir(string metin) { Stack s = new Stack(1000); string konrol; string bicimli_gecici; string bicimli = ""; int j = 0; while (j < metin.Length) { if ((metin[j]) == '<' && (metin[j + 1] == '/')) { // kapama durumu geldiyse acma durumunu ifade eden '>' isaretne // kadar yığıttan cek gecici stringine at(insert metodunu kullanarak) konrol = s.pop(); string gecici = ""; while ((konrol[0]) != ('>')) { gecici = gecici.Insert(0, konrol[0].ToString()); konrol = s.pop(); } // islemisec metoduna gerekli paretmereler olan metinin indis değerini // saklayan j değiskeni ,metni gösteren metin stringi ve yığıttan cekilen elemanları //gösteren gecici stringini gönder.dönen bicimlendirilmis gecici stringini //biçimlenmis_gecici ye ata bicimli_gecici = islemiSec(j, metin, gecici); //biciimli_gecici stringinin uzunluğundan hücük olduğu sürece döngüde bicimli_gecicinin //elemanlarını düzgün sırayla yığıta it for (int i = 0; i < bicimli_gecici.Length; i++) { s.push(bicimli_gecici[i].ToString()); } //4 artırki kapama durumunda ki isarteleri atlasın(<,/,> gibi ) j = j + 4; } // kapama durumu değilse buraya gir else { // ve acma durumu geldiğinde bicimlendirme karekterinin nerde //olduğunu bilmemiz için '>' isaretini yığıta it. istediğimizi //yığıta itebiliriz('<') 3 artır ki acma durumunda ki işaretlerin //hepsini atlasın if ((metin[j] == '<') && (metin[j + 2] == '>')) { s.push(metin[j + 2].ToString()); j = j + 3; } //acma durumuda değilse normal karekterdir.onu yığıta it else { s.push(metin[j].ToString()); j = j + 1; } } } //her yeni cektiğimizi en basa koyacak sekilde ata.ve bicimli yi dön. int indeks = 0; while (s.isEmpty() == false) { bicimli = bicimli.Insert(indeks, s.pop()); } return bicimli; }
protected static string hataliMİ(string metin) { Stack s = new Stack(1000); bool hatasiz = true; int i = 0; while ((i < metin.Length) && (hatasiz)) { if ((metin[i] == '<') && (metin[i + 1] == '/')) { //kapama durumu geldiğinde yığıttan cek //her kapama etiketi için yığıtta acma durumunu ifade eden bicimlendirme etiketi // var mı.yani yığıt bossa dengesizdir if (s.isEmpty()) { hatasiz = false; } //her acma etiketi kendi etiketiyle sınanır.esit değilse dengesizdir else { string top = s.pop(); if (metin[i + 2] == top[0]) { hatasiz = true; } else { hatasiz = false; } } } //acma durumu geldiğinde acma bicimlendirme etiketini yığıta it else { if (metin[i] == '<') { s.push(metin[i + 1].ToString()); } } i = i + 1; } //yığıt boskenken metin taramasının sonuna gelindiğinde ve //dengeli true ise hatalidir değilse hatasizdir if ((s.isEmpty()) && (hatasiz)) { return "hatasiz"; } else { return "hatali"; } }