Stránka 4 z 4

Re: Vigenerova šifra - C

Napsal: 23 zář 2017 20:05
od faraon
Hm, kdybys používal jakýkoliv Unix nebo Linux, stačilo by do konzole napsat

Kód: Vybrat vše

man 3 isalpha

a dostal bys manuálovou stránku vybraného příkazu ve zvolené sekci.

Pro uživatele napodobeniny operačního systému je tu holt Google, do kterého stačí zadat úplně stejný dotaz a pak jít na první odkaz: https://linux.die.net/man/3/isalpha

Použití je úplně jednoduché. Pokud se zadaný znak vejde do rozsahu té funkce, vrátí TRUE, jinak FALSE. Takže
  • islower() = a..z
  • isupper() = A..Z
  • isdigit() = 0..9
  • isalpha() = a..z+A..Z neboli islower()+isupper()
  • isalnum() = a..z+A..Z+0..9 neboli isalpha()+isnum()
A stejně tak všechny další, klidně by sis je mohl napsat i sám, například:

Kód: Vybrat vše

int isupper(int znak)
    {
    if (znak<'A' || znak>'Z') return 0;
    return 1;
    }

Dokonce by to šlo ještě jednodušeji, definovat jako makro:

Kód: Vybrat vše

#define isupper(int znak) (znak>='A' && znak<='Z')

A vlastně se obejdeš i bez toho, prostě tam ten zvolený rozsah napiš přímo do podmínky :lol:

Re: Vigenerova šifra - C

Napsal: 23 zář 2017 22:06
od popcorn
Tak jsem to nakonec pořešil takto:

Kód: Vybrat vše

                if(!isalpha((int) zprava[i]))
                    continue;

Re: Vigenerova šifra - C

Napsal: 24 zář 2017 07:39
od faraon
Teď bys už měl mít vyřešená nepísmena v textu, a co v hesle? Pokud stejný text zašifruješ hesly PChelp a PC-HELP, měl bys dostat stejný výsledek, stejně jako bys to dělal ručně na papíru. Stane se to? Mysli nejenom na nepovolené znaky, ale také na malá/velká písmena!

Můžeš si dokonce vybrat z víc způsobů jak to ošetřit, buď to budeš provádět neustále dokola během šifrování, nebo heslo po načtení upravíš do správného tvaru a potom už nic neřešíš. Vzhledem k tomu že načítání provádíš na dvou místech programu úplně stejně, vyplatilo by se ho odsunout do vlastní funkce a řešit to tam, přesně z tohohle důvodu vznikly kdysi strašně dávno podprogramy ;-)