Advertisement
Raizekas

Untitled

Jan 27th, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7.  
  8. /*/
  9.  * Parašyti metodą, kuris duotoje eilutėje surastų nurodytą žodį ir jį perkeltų
  10.    į eilutės pabaigą. Jei eilutėja yra keli vienodi ieškomi žodžiai, keliamas tik
  11.    pirmas iš jų. Skyrikliai nekeliami. Žodžio neradus - perkelėmis neatliakamas.
  12.  
  13.  * Atlikti veiksmus žinant, kad A = a
  14. /*/
  15.  
  16. namespace _2
  17. {
  18.     class Program
  19.     {
  20.         static void Main(string[] args)
  21.         {
  22.  
  23.             string skyrikliai = " ,.";
  24.  
  25.             string[] tekstas = System.IO.File.ReadAllLines("...//...//Tekstas.txt", Encoding.GetEncoding(1257));
  26.  
  27.             for (int i = 0; i < tekstas.Length; i++)
  28.                 RastiŽodį(ref tekstas[i], skyrikliai, "Gal");
  29.  
  30.             System.IO.File.WriteAllLines("...//...//Rezultatai.txt", tekstas);
  31.  
  32.         }
  33.         /*----------------------------------------------------------------------------------*/
  34.         static void RastiŽodį(ref string eilutė, string skyrikliai, string duotasŽodis)
  35.         {
  36.             int pr = 0;
  37.             string[] zodziai = eilutė.Split(skyrikliai.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  38.  
  39.             for (int i = 0; i < zodziai.Length; i++)
  40.                 if (zodziai[i].ToLower() == duotasŽodis.ToLower())
  41.                 {
  42.                     int poz = 0;        //kintamasis, parodantis per kiek pozicijų redaguojama eilutė nukirpta.
  43.                     string e = eilutė;  //susikuriama nauja eilutė, kurią pus galima redaguoti ir karpyti.
  44.                     while (true)
  45.                     {
  46.                         bool skyriklisPriekyje = false, skyriklisGale = false;  //loginiai kintamiesi pasakantys ar skyriklis yra tam tikrose vietose.
  47.                         char a = e[0], b = e[0];    //char elementai, kurių realiai net nereikią, bet taip paprasčiau atrodo... jie saugo simbolius prieš ir po žodžio, pradžioje prilyginami pirmajai raidei, nes kitaip meta errorą kad nėra prilyginti.
  48.  
  49.                         pr = e.IndexOf(zodziai[i]); //redaguojamoje eilutėje randą pirmą duotam žodžiui atitinkančią simbolių seką. (toliau "seka")
  50.  
  51.                         if (pr > 0)     //tikrina ar ta seka nėra eilutės pradžioje.
  52.                             a = e[pr - 1];      //jeigu nėra, tada simbolį prieš tą seką įdedame į char kintamajį a.
  53.                         else
  54.                             skyriklisPriekyje = true;       //jeigu seka yra pradžioje, tada prieš ją nėra jokių simbolių, o tai galime skaityti kaip skyriklį, tad skyriklisPrikyje = true;
  55.  
  56.                        if (pr + zodziai[i].Length < e.Length)   //panašiai kaip ir prieš tai buves metodas, tik šis tikrina ar sekos pirmo simbolio vieta + duoto žodžio ilgis yra mažesnis už visos eilutės ilgį. yra tik 2 galimi variantai, arba mažesnis, arba lygus, didesnis nebus, nes tai jau eina iš eilutės, kurioje yra tas žodis... tiesiog nelogiška.
  57.                            b = e[pr + zodziai[i].Length]; //jeigu mažesnis, tada prie sekos pradžios pridedame duotoodžio ilgį, ir gauname simbolio vietą esančią už sekos, tai tariamasis skyriklis.
  58.                        else
  59.                            skyriklisGale = true;    //jeigu ne, seka yra pačiame eilutės gale, kas ,kaip ir su pradžia, prilyginama skyrikliui, tad skyriklisGale = true;
  60.  
  61.                        if (!skyriklisPriekyje)  //jeigu atlikus tikrinimus prieš tai, žodis nebuvo eilutės priekyje, atliekame toliau einančius veiksmus.
  62.                            skyriklisPriekyje = skyrikliai.Contains(a);  //tikriname ar simbolis prieš seką yra skyriklis.
  63.  
  64.                        if (!skyriklisGale)  //jeigu atlikus tikrinimus prieš tai, žodis nebuvo eilutės gale, atliekame toliau einančius veiksmus.
  65.                            skyriklisGale = skyrikliai.Contains(b);  //tikriname ar simbolis už sekos yra skyriklis.
  66.  
  67.                         if (skyriklisPriekyje && skyriklisGale) //jeigu atlikus visus prieš tai sekusius veiksmus gauname, kad prieš seka ir už sekos yra skyrikliai, arba tariami skyrikliai (pradžia, galas), atliekame veiksmus su pagrindine eilute.
  68.                         {
  69.                             eilutė = eilutė.Remove(poz + pr, zodziai[i].Length);    //iš pagrindinės eilutės pašaliname duotą žodį. poz + pr, parodo vietą, kurioje yra žodis (nukirptų simbolių kiekis redaguojamoje eilutėje + sekos pradžios vieta redaguojamoje eilutėje)
  70.                             eilutė = eilutė + zodziai[i];   // prie eilutės galo pridedame duotą žodį.
  71.                             break; //stabdome begalini while ciklą.
  72.                         }
  73.                         else   //na, o jei prie seką, ar po jos nėra skyriklio
  74.                         {
  75.                             e = e.Substring(pr + 1);    //iš redaguojamos eilutės atkerpame pradžią iki turimos sekos pradžios simbolio + 1 pozicija. Ta viena pozicija tam, kad sekančio ieškojimo metu nerastų to paties žodžio, kitaip sakant panaikiname tos sekos pirmą raidę.
  76.                             poz += pr + 1; //išsaugome nukirptų simbolių skaičių, kurį naudosime poto.
  77.                         }
  78.                     }
  79.                     break;
  80.                 }
  81.         }
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement