Pereiti prie turinio

c++ Kelių eilučių perskaitymas ir paskutinių eilučių žodžių radimas


Rekomenduojami pranešimai

Mokytoja davė pasispręst, šių metų olimpiada mokyklos etapą ir beveik iškart su problema susiduriau, užduotis tokia, jog yra eilėraštis 2<= n <= 50 eilučių ilgio, ir reikia parašyti ar jis rimuojasi, tai yra ar paskutiniai eilučių žodžiai turi vienodai skiemenų, bet problema tame, kad nesugalvoju kaip ištraukti paskutinius žodžius kiekvienos eilutės..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dalyvavau toje olimpijadoje ir aš dariau taip.

Eina ciklas per visus vienos eilutės simbolius ir ieško ar yra tarpas. Kai randa tarpa kitamajį tarpas padaro true (tarpas = true).

Jeigu randa dar vieną tarpą tada vadinasi žodis nebuvo paskutinis ir ciklas skaičiuoja skiemenis vėl iš naujo tik kitam žodžiui.

 

Nemoku aiškinti tai duosiu pavyzdį:

 

for(short i = 0; i < s.length(); i++) {
        //skiemenys tai kiek skiemenu suskaiciavo tavo programa, cia juos perkrauna
        if(tarpas == true) {
                  skiemenys = 0;
                  }
        //Čia žemiau vyksta skiemenu skaiciavimas

        //Čia baigiasi skiemenu skaiciavimas

        //Čia ieško tarpo.
        if(c == ' ') {
                  tarpas = true;
        } else {
                  tarpas = false;
        }
        }
}

 

Abejoju ar aišku, bet gal nors ant kelio užvedžiau?

Redagavo RuleXas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Yra dar tokia funkcija strtok(), tai būtent šiai užduočiai ją pritaikiau.

 

char* last_word(char* str) {
   char *prev, *cur;
   cur = strtok(str, " ");
   prev = cur;

   while ((cur = strtok(NULL, " ")) != NULL) {
       prev = cur;
   }

   return prev;
}

 

Tiesa, čia su c stringu (char[]) :) Ir yra toks dalykas, kad jei tik vienas žodis, tai last_word() grąžins NULL ir pasidarysit segfaultą, jei to nepatikrinsit :)

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei su C++ string, tai toks turėtų veikti. rfind randa paskutinį tarpą, substr sukuria stringą nuo tos pozicijos iki galo. Kadangi rfind gali grąžinti -1, tai max pasirūpina, kad būtų kopijuojama nuo pradžių.

 

string lastWord(string line)
{
   return line.substr(max(line.rfind(" "), 0));
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...