NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Diskuze: Defragmentace znaků

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
wohnout008
Člen
Avatar
wohnout008:3.6.2015 0:09

Ahoj, věděl by někdo co s tímhle?
Děkuji za každou radu. :-) ;)

Vstup:string

výstup:string

Př:3x2y4z10x

↓↓↓↓↓↓↓↓↓↓↓↓↓↓ /detransformace

př:xxxyyzzzzxxxxxxxxxx

 
Odpovědět
3.6.2015 0:09
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na wohnout008
David Novák:3.6.2015 0:12

zkus projít fórum.. myslím, že už se to tu řešilo ;)

Nahoru Odpovědět
3.6.2015 0:12
Chyba je mezi klávesnicí a židlí.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na wohnout008
Martin Dráb:3.6.2015 0:33

V zásadě by se dalo říci, že by algoritmus řešící tvůj problém měl postupně číst ze vstupu a u každého znaku řešit následující problém:

  • Jedná-li se o číslo (cifra 0-9), měl by jej započítat do právě načítaného čísla (to si budeš pamatovat stranou), abys dovoloval uvádět i vícecifernou četnost písmen.
  • Jedná-li se o písmeno, prostě jej vezmeš a vypíšeš tolikrát, jaká je hodnota v naparsovaném čísle.

Inspirativní zdrojový kód je níže. Jen pozor, zcela jistě nefunguje. Jenom to má být jedna z možností, jak problém řešit. Nezkoušel jsem ho a ani to nemám v plánu.

...
int pocet = 0;
char znak = '\0';
while (!feof(stdin)) {
  int tmp = fgetc(stdin);
  if (tmp != EOF) {
    if (tmp >= '0' && tmp <= '9')
      pocet = pocet*10 + (tmp - '0');
    else if (tmp >= 'a' && tmp <= 'z') {
      znak = tmp;
      for (int i = 0; i < pocet; ++i)
        fputc(stdout, znak);

      pocet = 0;
      znak = '\0';
    } else {
       ...
    }
  }
}

Možná by se zde dalo s úspěchem použít něco jako scanf, ale nevím, zda by tahle funkce mylně neinterpretovala některé vstupy.

Nahoru Odpovědět
3.6.2015 0:33
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.