>> ZAMYLA CHAN: Grattis på avsluta din
första par C-program.
Jag vet att din första razzia i C syntax kan vara skrämmande.
Men jag försäkrar er, i slutet av Naturligtvis kommer du att kunna titta på
första par uppdrag och slutföra dem på några minuter.
>> Nu när du får mer bekant med syntax, låt oss komma till Caesar.
I Caesar, kommer användaren lämna in en heltal nyckel som en kommandorad
argument, och ange sedan en vanlig textmeddelande vid prompten.
Programmet kommer då att kryptera texten och tryck
deras ciphertext budskap.
>> Krypterings för Caesar är ganska enkel.
Shift varje bokstav, i deras klartext, med nyckeln.
Som ett resultat, det är också ganska osäker.
Men att genomföra Caesar kommer att införa oss till ASCIIMath och array uppgifter
strukturer.
Vi kommer till mer komplexa chiffer senare.
Med en Caesar nyckel 2, bokstaven A i klartext skulle representeras av
bokstaven C i chiffertexten eftersom C är två bokstäver efter A. B skulle vara
företrädd av D och C av E. Mot slutet av alfabetet är W
företrädd av Y och X med Z. Men Y har inte två bokstäver efter det, så
de chiffer sveper runt alfabetet.
Y i klartext alltså representeras av A i chiffertexten, och Z av B. Det kan
Hjälp för att visa Caesar Cypher som en kontinuerlig alfabet hjul.
>> Att kryptera sin text, användaren träder två argument
till kommandoraden -
. / Caesar följt av en nyckel.
Som alltid, kan vi lita inte användaren fullständigt ange ingång som gör
känsla för vårt program.
Så vi måste validera sina kommandoraden.
>> Istället för att använda int main tomrum, vi använder int main, int argc, string argv.
Den heltalsvariabel argc representerar antalet argument som skickas till
kommandoraden.
Och argv är en array, eller se det som en förteckning, av argumenten gått i.
>> Så för Caesar, hur vi validerar användarens input?
Jo, de skall bara ange två kommandoradsargument -
. / Caesar och en nyckel.
Så om argc inte är 2, betyder det att de glömde antingen en nyckel och bara
in. / Caesar, eller de angett flera nycklar.
>> Om så är fallet, så kommer du vill skriva ut instruktioner
och avsluta programmet.
De måste försöka igen från kommandoraden.
Men även om argc är 2, kommer du måste kontrollera om de
ger dig en giltig nyckel.
För Caesar, behöver du ett heltal.
Men argv är en array av strängar.
Hur får du tillgång nyckeln?
>> En snabb titt på arrayer -
datastrukturer som håller multipla värden av samma datatyp.
Posterna är noll-indexerad, vilket innebär att det första elementet är indexet noll
och det sista elementet vid index storlek minus 1, där storlek är antalet
element i uppsättningen.
>> Om jag förklarade en ny brevlåda sträng array av längd 3, visuellt, det
ser ut så här.
Tre behållare för stråkar , Sida vid sida.
För att komma åt ett element skriver du namnet av uppsättningen och sedan indikera
Indexet inom hakparenteser.
Här, jag tilldela ett värde till varje element, precis som jag skulle göra med någon
annan sträng variabel.
>> Så för att komma åt våra kommandoradsargument, allt vi behöver göra är att komma
den högra delen av argv array.
Om användaren anger. / Blastoff Team Rocket i terminalen, argv 0 skulle
vara. / blastoff.
argv skulle vara Team, och arg2 vore raket.
>> Nu när vi kan komma åt vår nyckel, Vi behöver fortfarande göra
säker på att det är rätt.
Vi måste omvandla det till ett heltal.
Men vi kan inte bara kasta ut vi har gjort tidigare.
Lyckligtvis tar A till Y-funktion omsorg av detta för oss och även returnerar 0
Om strängen inte kan omvandlas in ett heltal.
Det är upp till dig, men, för att berätta användaren varför kommer du inte
låta programmet fortsätta.
Lagra resultatet av A till Y i en heltal, och där har du din nyckel.
Nästa del är enkel.
Uppmana användaren för deras vanlig text, vilket kommer att vara av datatypen string.
Lyckligtvis för oss, matas alla användare strängar är giltiga.
>> Nu när vi har all nödvändig input från användaren, är det dags för oss att
kryptera sitt budskap.
Begreppet Caesar är enkel nog att förstå.
Men hur vet din dator som breven kommer efter varandra?
>> Här är där ASCII tabellen kommer in
Varje karaktär har ett heltal antal associerade med det.
Capital A är 65.
Capital B är 66.
Gemener en är 97.
Gement b är 98.
Men tecknen är inte begränsade till bara alfabetiska siffror.
Till exempel, tecknet @ är ASCII nummer 64.
>> Innan behandlar hela strängen, Låt oss låtsas att vi har bara att flytta
en karaktär.
Tja, vill vi bara att flytta faktiska bokstäver i klartext, inte
bokstäver eller siffror.
Så det första som vi kommer att vilja kontrollera är om karaktären är i
alfabetet.
>> Funktionen isalpha gör detta för oss och returnerar ett booleskt -
sant om karaktärerna är en bokstav, falskt om något annat.
Två andra användbara funktioner är isupper och islower, med
självförklarande namn.
De återvänder sant om givet tecken är stora eller små bokstäver,
respektive.
Eftersom de är Booleans, de är lämpligt att använda som villkor.
>> Om isalpha returnerar sant, behöver du att flytta tecknet med nyckeln.
Så låt oss öppna för ASCIIMath och göra vissa ASCII matte.
Användningsområdet är mycket lik användningen för Caesar och tar in en knapp på
kommandoraden.
>> Om jag kör ASCIIMath 5, verkar det att lägga 5 till en, ger mig bokstaven f, och
visning av ASCII-värdet.
Så låt oss ta en titt på programmet.
>> Du kanske undrar, just här, varför brev är ett heltal, när det är
tydligt, väl, ett brev.
Det visar sig att tecken och heltal är utbytbara.
Genom att sätta bokstaven A i singel citattecken, kan heltalet lagra
ASCII-värdet på kapitalet A. Var försiktig dock.
Du behöver de enskilda kläder.
Utan de enkla citattecken, den kompilator skulle leta efter en variabel
heter A, och inte tecknet.
>> Då ska jag lägga brev och en nyckel, lagra Summan i int variabler resultatet.
Även om resultatet är av datatypen heltal, använder min printf uttalande
% C platshållare för tecken.
Så att programmet skriver ut tecknet associerad med heltal resultatet.
Och eftersom vi tryckt heltal form samt med% d, ser vi
numret också.
Så nu kan du se att vi behandla tecken och
heltal, och vice versa.
>> Låt oss testa ut ASCIIMath några fler gånger med 25 som en nyckel.
Vi får bokstaven z..
Nu försöker vi 26.
Vi vill få bokstaven a, men istället får vi en vänster konsol.
Så uppenbarligen, bara lägga till nyckeln till brevet inte kommer att göra.
Vi måste ta reda på en formel för att slå runt alfabetet, gillar vår
exempel i början gjorde.
>> En formel för Caesars skift är följande.
c är lika med p plus k modulo 26.
Kom ihåg att modulo är en användbar operation som ger oss resten
att dela ett antal av den andra.
Låt oss tillämpa denna formel på slätten text brev med en nyckel 2.
ASCII-värdet för y är 89, vilket ger oss 91 modulo 26,
vilket är lika med 13 -
definitivt inte ASCII-värdet en, är som 67.
>> Humor mig nu och röra sig bort från ASCII-värden till ett kartotek
där A är noll och Z är 25, vilket innebär att Y är 24.
24 plus 2, modulo 6, ger oss 26, modulo 26, 0, som är den
alfabetiskt register över ett.
Så denna formel tycks gälla den alfabetiskt register över brevet och
inte dess ASCII värde.
>> Men du börjar med ASCII-värden.
Och att skriva ut ciphertext karaktär, du behöver dess ASCII värde samt.
Det är upp till dig, då, för att räkna ut hur du växlar fram och tillbaka.
>> När du räkna ut den rätta formeln för ett tecken, allt du behöver göra
är att tillämpa samma formel för varje brev i klartext -
endast om denna skrivelse är alfabetisk, förstås.
Och kom ihåg att du måste bevara fallet, övre eller nedre, det är där
den isupper och funktioner isLower nämnts tidigare kommer väl till hands.
Du kanske har två formler -
ett för versaler och en för gemener.
Så isupper en isLower hjälper dig avgöra vilken formel att gälla.
>> Hur ansöker du din formel till varje enstaka tecken i en sträng?
Tja, är en sträng bara en matris med tecken.
Så du kan komma åt varje tecken genom gruppering över varje tecken i
sträng i en for-slinga.
När det gäller villkor för din for-slingan, funktionen strlen, för sträng
längd, kommer att komma till hands.
Det tar i en sträng som indata och returnerar längden på den strängen.
Se till att inkludera rätt biblioteket att använda funktionen stränglängden.
>> Och där har du din ciphertext.
Mitt namn är Zamyla.
Och [Pratar CODE].