>> ZAMYLA CHAN: Gefeliciteerd op de afwerking van uw
eerste paar C-programma's.
Ik weet dat je eerste uitstapje in C syntax kan ontmoedigend zijn.
Maar ik verzeker u, aan het einde van de Natuurlijk, zult u in staat om te kijken naar de
eerste paar opdrachten en vullen ze in minuten.
>> Nu dat je krijgt meer vertrouwd met syntax, laten we aan Caesar.
In Caesar, zal de gebruiker het indienen van een integer sleutel als een command line
argument, voer dan een vlakte tekstbericht op de prompt.
Het programma zal dan vercijferen de tekst en druk
hun gecodeerde boodschap.
>> De vercijfering voor Caesar is heel simpel.
Verschuiven elke letter, in hun platte tekst, door de sleutel.
Daardoor is het ook vrij onzeker.
Maar tot uitvoering Caesar zal introduceren ons ASCIIMath en array data
structuren.
We krijgen aan meer complexe cijfers later.
Met een Caesar sleutel van 2, de letter A in platte tekst zou worden vertegenwoordigd door
de letter C in cijfertekst omdat C is twee brieven naar A. B zou zijn
vertegenwoordigd door D en C door E. Towards het einde van het alfabet, W
vertegenwoordigd door Y, X en Y door Z. Maar geen twee letters hebben na het, zo
de cijfers wraps rond het alfabet.
Y in platte tekst wordt dus voorgesteld door Een in cijfertekst en Z B. Het kan
helpen om de Caesar Cypher bekijken zoals een continue alfabet wiel.
>> Om de tekst, de gebruiker vercijferen zullen twee argumenten invoeren
in de command line -
. / Caesar gevolgd door een sleutel.
Zoals altijd, kunnen we niet de gebruiker vertrouwen volledig in te voeren die ervoor in te voeren
logisch voor ons programma.
Dus we moeten hun valideren command line-ingang.
>> In plaats van het gebruiken van int main leegte, we zijn behulp int main, int argc, touwtje argv.
De integer variabele argc vertegenwoordigt het aantal argumenten dat in
de command line.
En argv is een array, of dat het als een lijst van de argumenten doorgegeven inch
>> Dus voor Caesar, hoe kunnen we valideren invoer van de gebruiker?
Nou ja, ze moeten alleen worden betreden twee command line argumenten -
. / Caesar en een sleutel.
Dus als argc is niet 2, dat wil zeggen dat ze ofwel vergaten een sleutel en net
ingevoerd. / caesar, of ze ingevoerd meerdere toetsen.
>> Als dit het geval is, dan zul je willen instructies afdrukken
en sluit het programma.
Ze nodig hebben om het opnieuw te proberen vanaf de opdrachtregel.
Maar zelfs als argc 2, zul je moeten controleren of ze
geven u een geldige sleutel.
Voor Caesar, je moet een integer.
Maar argv is een array van strings.
Hoe krijg je toegang tot die sleutel?
>> Een snelle blik op arrays -
datastructuren die meerdere vasthouden waarden van hetzelfde gegevenstype.
Inzendingen zijn nul-geïndexeerde, wat betekent dat het eerste element is de index nul
en het laatste element is bij index grootte minus 1, waar de grootte is het aantal
elementen in de array.
>> Als ik verklaarde een nieuwe array van strings mailbox van lengte 3, visueel, het
ziet er zo uit.
Drie containers voor strijkers , Zij aan zij.
Om toegang te krijgen tot een element, de naam typt u van de array en dan aangeven
de index tussen vierkante haken.
Hier ben ik het toekennen van een waarde aan elke element, net zoals ik zou doen met een
andere tekenreeksvariabele.
>> Dus om toegang te krijgen tot onze command line argumenten, alles wat we moeten doen is toegang
het recht element van de argv array.
Als de gebruiker. / Blastoff Team getreden Raket in de terminal, argv 0 zou
zijn. / blastoff.
argv zou het team zijn, en arg2 zou raket te zijn.
>> Nu we onze sleutel kan openen, we moeten nog steeds te maken
ervoor dat het correct is.
We moeten om te zetten in een integer.
Maar we kunnen niet zomaar uitbrengen als we hebben eerder gedaan.
Gelukkig, de A tot Y functie verzorgt van deze voor ons en zelfs het resultaat 0
als de tekenreeks kan worden geconverteerd in een integer.
Het is aan u, maar, om te vertellen de gebruiker waarom doe je niet
laat het programma te gaan.
Sla het resultaat van A Y een integer, en daar heb je je sleutel.
Het volgende deel is eenvoudig.
De gebruiker om hun platte tekst, die zal worden van het datatype string.
Gelukkig voor ons, alle door de gebruiker ingevoerd strings zijn geldig.
>> Nu dat we alle nodige input van de gebruiker, is het tijd voor ons om
vercijferen hun boodschap.
Het concept van Caesar is eenvoudig genoeg te begrijpen.
Maar hoe werkt de computer weet welke letters komen achter elkaar?
>> Hier is waar de ASCII-tabel komt inch
Elk personage heeft een integer nummer ermee verbonden zijn.
Hoofdletter A is 65.
Hoofdletter B is 66.
Kleine letter a is 97.
Kleine letter b is 98.
Maar tekens zijn niet beperkt om gewoon alfabetische nummers.
Bijvoorbeeld, het @-symbool is ASCII nummer 64.
>> Voordat het omgaan met de hele reeks, laten we doen alsof we gewoon moeten verschuiven
een teken.
Nou, we willen alleen verschuiven werkelijke brieven in de platte tekst, niet
letters of cijfers.
Dus het eerste wat we willen controleren is of het karakter is in
het alfabet.
>> De functie isalpha doet dit voor ons en retourneert een Boolean -
true als de personages is een brief, false als anders.
Twee andere handige functies zijn isupper en islower, met
zelfverklarende namen.
Zij keren true als de opgegeven karakter is hoofdletters of kleine letters,
respectievelijk.
Omdat ze Booleans, ze zijn bruikbaar gebruiken als voorwaarde.
>> Als isalpha true retourneert, moet u om dat teken te verschuiven door de sleutel.
Dus laten we open voor ASCIIMath en doe wat ASCII wiskunde.
Het gebruik is zeer vergelijkbaar met het gebruik voor Caesar en neemt in een toets aan de
opdrachtregel.
>> Als ik zonder ASCIIMath 5, het lijkt te voegen 5 een, mij de brief f, en
weergeven van de ASCII-waarde.
Dus laten we eens een kijkje nemen op het programma.
>> Je kunt je afvragen, hier, waarom brief een integer, wanneer het
duidelijk, goed, een brief.
Het blijkt dat de karakters en integers uitwisselbaar.
Door de letter A in enkele aanhalingstekens, kan het integer opslaan
de ASCII-waarde van het kapitaal A. Wees voorzichtig, dat wel.
Je moet het enkel kleren.
Zonder de enkele aanhalingstekens, de compiler zou kijken voor een variabele
genaamd A, en niet het karakter.
>> Vervolgens brief en een sleutel toe te voegen I, het opslaan van de sum in het int variabelen resultaat.
Hoewel resultaat is van gegevenstype integer, mijn printf statement maakt gebruik van de
% C tijdelijke aanduiding voor de personages.
Zodat het programma maakt het karakter geassocieerd met het gehele resultaat.
En aangezien we afgedrukt het integer vorm ook met% d, zien we
het nummer ook.
Nu kun je dus zien dat we behandelen personages en
integers, en vice versa.
>> Laten test ASCIIMath een paar meer tijden met 25 als een sleutel.
We krijgen de letter z.
Nu proberen we 26.
We willen de brief een te krijgen, maar in plaats daarvan krijgen we een linker beugel.
Zo duidelijk, alleen het toevoegen van de toets om de brief niet zal doen.
We moeten uitzoeken een formule te wikkelen rond het alfabet, zoals onze
bijvoorbeeld in het begin deed.
>> Een formule voor de Caesar's shift is als volgt.
c is gelijk aan p plus k modulo 26.
Vergeet niet dat modulo is een nuttig operatie die geeft ons de rest
verdelen een aantal door de andere.
Laten we dit toepassen formule op de vlakte tekst schrijven met een sleutel van 2.
De ASCII-waarde van y is 89, die geeft ons 91 modulo 26,
wat gelijk 13 -
zeker niet de ASCII-waarde een, die 67.
>> Humor me nu en af ​​te stappen van de ASCII-waarden om een ​​alfabetische index
wanneer A nul is en Z 25, dat wil zeggen dat Y is 24.
24 plus 2, modulo 6, geeft ons 26, modulo 26, 0, hetgeen de
alfabetische index van een.
Dus deze formule blijkt de toepassing alfabetische index van de letter en
niet de ASCII-waarde.
>> Maar je begint met ASCII-waarden.
En om de cijfertekst karakter af te drukken, je zult de ASCII-waarde nodig ook.
Het is aan u, dan, om erachter te komen hoe je heen en weer schakelen.
>> Zodra u uitzoeken van de juiste formule voor een teken, alles wat je hoeft te doen
wordt toegepast dezelfde formule iedere brief in de platte tekst -
alleen als die brief is alfabetisch, natuurlijk.
En vergeet niet dat je nodig hebt om te bewaren het geval is, bovenste of onderste, dat is waar
de isUpper en isLower functies eerder vermeld zal van pas komen.
Je zou kunnen hebben twee formules -
een voor hoofdletters en een voor kleine.
Dus isUpper een isLower zal u helpen welke formule van toepassing.
>> Hoe ziet u uw formule gelden voor iedere enkel teken in een string?
Nou ja, een string is gewoon een scala aan personages.
Dus u kunt elk karakter openen door groeperen dan elk karakter in de
tekenreeks in een lus.
Als voor de conditie van uw voor-lus, de functie strlen, voor strijkkwartet
lengte, zal van pas komen.
Het neemt een tekenreeks als invoer en geeft de lengte van die string.
Zorg ervoor dat u de juiste bibliotheek bevatten om de lengte van de string functie te gebruiken.
>> En daar heb je cijfertekst.
Mijn naam is de Zamyla.
En [SPEAKING CODE].