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].