Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Defragmentace znaků

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.