ZAMYLA CHAN: Baie geluk op die afronding van jou eerste paar C-programme. Ek weet dat jou eerste inval in C sintaksis kan ontmoedigend wees. Maar ek kan jou verseker, aan die einde van die Natuurlik, sal jy in staat wees om te kyk na die eerste paar opdragte en voltooi hulle in minute. Nou dat jy om meer vertroud met sintaksis, laat ons aan die keiser. In die keiser, sal die gebruiker stuur 'n integer sleutel as 'n command line argument, en gee dan 'n vlakte SMS-boodskap op die instruksielyn. Die program sal dan versleutelen die teks en druk hul kriptoteks boodskap. Die geheimschrift vir Caesar is eenvoudig. Skuif elke letter, in hul gewone teks, deur die sleutel. As gevolg hiervan, is dit ook mooi onseker. Maar tot uitvoering Caesar sal stel om ons te ASCIIMath en verskeidenheid data strukture. Ons sal kry om meer komplekse getalle later. Met 'n Caesar sleutel van 2, die letter A in plain text sal verteenwoordig word deur die letter C in kriptoteks omdat C is twee briewe na A. B sou wees verteenwoordig deur D en C deur E. Teen die einde van die alfabet, W is verteenwoordig deur Y en X deur Z. Maar Y nie twee briewe na dit, so die getalle vou rondom die alfabet. Y in gewone teks word dus verteenwoordig deur A in kriptoteks, en Z deur B. Dit kan help om die keiser Cypher te sien soos 'n deurlopende alfabet wiel. Hul teks, die gebruiker te versleutelen sal ingaan twee argumente in die command line - / Keiser. Gevolg deur 'n sleutel. Soos altyd, kan ons nie vertrou nie die gebruiker heeltemal insette wat te betree sin vir ons program. So ons sal hulle te bekragtig command line insette. In plaas van die gebruik van int main nietig, ons is gebruik int main, int argc, string bevat SPASIES. Die heelgetalveranderlike argc verteenwoordig die aantal argumente geslaag het in die opdrag lyn. En bevat SPASIES is 'n skikking, of dink dat dit as 'n lys van die argumente geslaag in So vir die keiser, hoe ons die geldigheid die gebruiker se insette? Wel, hulle moet net betree twee command line argumente - / Keiser. En 'n sleutel. So as argc is nie 2, wat beteken dat hulle óf vergeet 'n sleutel en net aangegaan / keiser., of hulle het verskeie sleutels. As dit die geval is, dan sal jy wil instruksies te druk en sluit die program. Wat hulle nodig het om weer te probeer uit die opdrag lyn. Maar selfs as argc is 2, sal jy nodig het om te kyk of hulle gee jy 'n geldige sleutel. Vir Caesar, jy moet 'n heelgetal. Maar bevat SPASIES is 'n verskeidenheid van snare. Hoe kry jy dat die sleutel? 'N vinnige blik op skikkings - data strukture wat vashou aan verskeie waardes van die dieselfde data tipe. Inskrywings is nul-geïndekseer, wat beteken dat die eerste element is die indeks nul en die laaste element is by die grootte van die indeks minus 1, waar die grootte is van die aantal elemente in die skikking. As ek verklaar 'n nuwe string verskeidenheid posbus lengte van 3, visueel, is dit lyk. Drie houers vir strykers , Langs mekaar. Enige element om toegang te verkry, jy tik die naam van die skikking en dui dan aan die indeks in vierkantige hakies. Hier, ek toeken van 'n waarde aan elke element, net soos ek sou doen met enige ander string veranderlike. So ons command line argumente om toegang te verkry, al wat ons moet doen, is om toegang tot die reg om deel van die bevat SPASIES skikking. As die gebruiker aangegaan / blastoff. Team Vuurpyl in die terminale, bevat SPASIES 0 sou wees / blastoff.. bevat SPASIES sou wees span, en arg2 sou wees vuurpyl. Nou dat ons kan toegang tot ons sleutel, het ons nog nodig het om te maak seker dat dit korrek is. Ons het dit nodig om te skakel na 'n heelgetal. Maar ons kan nie net gooi soos Ons het voorheen gedoen het nie. Gelukkig is die A tot Y funksie sorg van hierdie vir ons en selfs terugkeer 0 As die string kan nie omgesit word in 'n heelgetal. Dit is aan jou, al is, te vertel die gebruiker hoekom sal jy nie Laat die program voort te gaan. Bewaar die gevolg van 'n te Y in 'n integer, en daar het jy jou sleutel. Die volgende deel is eenvoudig. Vra die gebruiker om hul gewone teks, wat sal word van data string-tipe. Gelukkig vir ons, al die gebruiker ingevoer snare is geldig. Nou dat ons al die nodige insette van die gebruiker, is dit tyd vir ons om te versleutelen hul boodskap. Die konsep van die keiser is eenvoudig genoeg om te verstaan. Maar hoe om jou rekenaar weet watter briewe kom na mekaar? Hier is waar die ASCII tabel kom in Elke karakter het 'n heeltallige aantal wat daarmee gepaard gaan. Capital A is 65. Capital B is 66. Kleinletter a is 97. Klein b is 98. Maar karakters is nie beperk net alfabetiese nommers. Byvoorbeeld, die @-simbool is ASCII nommer 64. Voordat die hantering van die hele string, Kom ons maak asof ons net om te skuif een karakter. Wel, ons wil net om te skuif werklike letters in die plain text, nie karakters of nommers. Dus is die eerste ding wat ons wil kyk, is of die karakter in die alfabet. Die funksie isalpha doen dit vir ons en gee 'n Boole - waar as die karakters is 'n brief, vals of anders. Twee ander nuttige funksies isupper en islower, met selfverduidelikend name. Hulle keer terug waar as die gegewe karakter is hoofletters of klein, onderskeidelik. Want hulle is Booleans, hulle is nuttig om te gebruik as voorwaardes. As isalpha terugkeer waar is, moet jy daardie karakter te skuif deur die sleutel. So laat ons oop te maak vir ASCIIMath en doen 'n ASCII wiskunde. Die gebruik is baie soortgelyk aan die gebruik vir die keiser en neem in 'n sleutel by die command line. As ek loop ASCIIMath 5, blyk dit by te voeg 5 'n, gee my die letter f, en vertoon die ASCII waarde. So kom ons neem 'n blik op die program. Jy mag dalk wonder, reg hier, hoekom brief is 'n heelgetal is, wanneer dit duidelik, goed, 'n brief. Dit blyk dat die karakters en heelgetalle is verwissel. Deur die letter A in 'n enkele aanhalingstekens, kan die heelgetal stoor die ASCII waarde van kapitaal A. Wees versigtig, al is. Jy moet die enkele klere. Sonder die aanhalingstekens, die samesteller sal kyk vir 'n veranderlike die naam van A, en nie die karakter. Dan voeg ek brief en 'n sleutel, stoor die bedrag in die int veranderlikes gevolg. Selfs al gevolg is van data tipe integer, my printf verklaring maak gebruik van die % C plekhouer vir karakters. So het die program druk die karakter verband hou met die heelgetal gevolg. En omdat ons gedruk die heelgetal vorm asook die gebruik van% d, sien ons die aantal so goed. So nou kan jy sien dat ons behandel karakters en heelgetalle, en omgekeerd. Kom ons toets uit ASCIIMath 'n paar meer keer met behulp van 25 as 'n sleutel. Ons kry die letter Z. Nou het ons probeer 26. Ons wil hê dat die brief 'n te kry, maar Inteendeel, ons kry 'n links hakkie. So natuurlik, net die toevoeging van die sleutel tot die brief sal doen nie. Ons moet om uit te vind 'n formule te draai rondom die alfabet, wil ons byvoorbeeld in die begin gedoen het. 'N formule vir die keiser se verskuiwing is soos volg. c gelyk p plus k modulo 26. Onthou dat modulo is 'n nuttige operasie wat gee ons die res die verdeling van een getal deur die ander. Kom ons pas hierdie formule na die vlakte teks brief met 'n sleutel van 2. Die ASCII waarde van y is 89, wat gee ons 91 modulo 26, wat gelyk is aan 13 - beslis nie die ASCII waarde van 'n, wat is 67. Humor my nou en weg te beweeg van die ASCII waardes aan 'n alfabetiese indeks waar 'n nul is en Z is 25, wat beteken dat Y is 24. 24 plus 2, modulo 6, gee ons 26, modulo 26, 0, wat die alfabetiese indeks van 'n. So lyk hierdie formule toe te pas op die alfabetiese indeks van die letter en nie sy ASCII waarde. Maar jy begin met die ASCII waardes. En die kriptoteks karakter te druk, sal jy sy ASCII waarde as goed nodig het. Dit is aan jou, dan, om uit te vind hoe om te heen en weer oorskakel. Sodra jy uitvind die regte formule vir 'n karakter, al wat jy hoef te doen, is dieselfde formule van toepassing op elke brief in die plain text - slegs indien daardie brief is alfabeties, van die kursus. En onthou dat jy nodig het om te bewaar die geval, boonste of onderste, dis waar die isUpper en isLower funksies vroeër genoem sal handig te pas kom. Jy kan hê om twee formules - een vir hoofletters en een vir klein. So isUpper 'n isLower sal help om jou bepaal watter formule toe te pas. Hoe doen jy jou formule om elke enkele karakter in 'n string? Wel, 'n string is net 'n verskeidenheid van die karakters. So kan jy elke karakter toegang deur groepering oor elke karakter in die string in 'n lus vir. Soos vir die toestand van jou vir lus, die funksie strlen, vir string lengte, sal handig te pas kom. Dit neem in 'n string as insette en gee die lengte van die string. Maak seker dat die korrekte biblioteek te sluit die string lengte funksie te gebruik. En daar het jy jou kriptoteks. My naam is die Zamyla. En [PRAAT code].