Datuve :: Forums :: Arhīvs :: C# nevaru saprast, kur man ir kļūda.

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 146

Reģistrētie lietotāji online: 0

Viesi online: 146

Datuve.lv video
Top.LV

C# nevaru saprast, kur man ir kļūda.

Ievietoja: normis_161 @ 2008.12.03 22:14  

NO šī linka parāstīju vienu kodu: http://www.homeandlearn.co.uk/csharp/csharp_s8p4.html kurš mekē cik reizes atkārtojas viens un tas pats vārds.
Šādu kodu es parākstīju:
private void button1_Click(object sender, EventArgs e)
       {
           string someText = "Is it true that true ealuates as true?";

           int strLen = someText.Length;
           int result = 0;
           int counter = 0;
           int foundLen = 0;

           for (int i= 0; i < strLen; i++)
           {
               result = someText.IndexOf("true", foundLen, strLen - foundLen);

               if (result !=-1)
               {
                   foundLen = result +1;
                   counter++;
               }
           }
           MessageBox.Show("true found" + counter.ToString() + " times");
       }
Bet kad es palaižu progammu, tad viņš man rāda ka true ir trīs reizes atkārtojies, kaut arī nekas nav bijis ievadīts, kā arī ja es kaut ko ievadu, tad tik un tā viņš man rāda, ka true ir ievadīts trīs reizes. Kāds man lūdzu varētu pateikt, kur man kļūda ir?

Komentāri:

#1 bombtrack @ 2008.12.03 22:20

Nu bet loģiski:


string someText = "Is it true that true ealuates as true?"

- šeit tu inicializē simbolu virkni, kura satur 3 vārdus "true".

#2 normis_161 @ 2008.12.03 22:30

Paldies! Sapratu tagad. Vnk es mazdrusciņ pārpratu, kas bija tur rakstīts. Strap citu kā varētu uztaisīt tā,  ka viņš nemeklē divus simbolus pēc kārtas, bet gan piemēram aizverošās iekavas? Piemēram, viena iekava ir sākumā (atverošā), bet otra ir biegās (aizverošā). Piemēram, (piemers) vai arī p(piemers). Kā tad būtu jāizdara šajā gadījumā, lai viņš varētu saskaitīt cik kopā ir pareizu iekavu, respektīvi, ja kāda cita iekava ir pa vidu piemēram ([), tad viņš tās divas iekavas neskaitītu. Es zinu kā pa vienai tās var saskaitīt, bet to, kā viņš varētu atpazīt pareizu iekavu lietošanu un pareizo iekavu saksaitīšanu, gan es nezinu kā to varētu izdarīt.

#3 clalbus @ 2008.12.03 23:04

Esi pazīstams ar tādu datu struktūru kā Steks ? Viens no vienkāršākajiem risinājumiem būtu tāds:
1. ej cauri tekstam, kad satiec atverošo iekavu, tad
2. ieliec to stekā un ej tālāk, tā turpini līdz satiec aizverošo iekavu.
3. Tagad izņem iekavu no steka un pieskaiti +1 pie pareizajām iekavām u.t.t. līdz teksta galam. Ja steks ir tukšs, bet Tu satiec vēl aizverošās iekavas, tad tās vnk ignorē.
Lai šis algoritms darbotos ar gadījumu "([)", tad, kad Tu izņem (atverošo) iekavu no steka salīdzini to ar aizverošo (kuru tikko atradi), ja nav vienādas, tad nepieskaiti, un neaizmirsti izņemt atverošo "(" pirms sāc pārbaudīt nākošo simbolu tekstā.. Šis ir pirmais variants, kas man ienāca prātā..

#4 normis_161 @ 2008.12.04 07:24

#5 bombtrack @ 2008.12.04 09:51

Var arī iztikt bez steka:
lasi simbolu virkni pa 1 simbolam, skaiti atverošās un aizverošās iekavas. Ja kādā brīdī aizverošo iekavu skaits pārsniedz atverošo iekavu skaitu, tad šajā simbolu virknē iekavas nav saliktas 'pareizi',
kā arī, ja beigās iekavu skaits nav vienāds.
Lai darbotos ar "([)" - ja kādā brīdī atverošo iekavu skaits ir lielāks par aizverošo iekavu skaitu un nolasītais simbols ir "[" vai "]", tātad ir nepreizi saliktas iekavas.