ZAMYLA Chan: Gratulojn sur fini vian unua paro de C programoj. Mi scias, ke via unua incursión C sintakso povas esti fortimiga. Sed mi certigas vin, al la fino de la Kompreneble, vi povos rigardi la unua paro de taskoj kaj kompletigi ilin en minutoj. Nun ke vi fariĝas pli familiara kun sintakso, ni iru al Cezaro. En Cezaro, la uzanto sendi al entjero klavo kiel komanda linio argumento, tiam entajpi ebenaĵo teksto mesaĝon ĉe la prompto. La programo estos tiam encipher la teksto kaj presita iliaj ĉifrita teksto mesaĝo. La enciphering por Cezaro estas sufiĉe simpla. Shift ĉiu litero, en siaj plata teksto, por la ŝlosilo. Kiel rezulto, estas ankaŭ bela necerta. Sed apliki Cezaro enkondukos nin al ASCIIMath kaj tabelo datumoj strukturoj. Ni ricevos pli kompleksa ĉifroj poste. Kun Cezaro ŝlosilo de 2, la litero A en plata teksto estus reprezentita de la litero C en ĉifrita teksto ĉar C estas du literoj post A. B estus reprezentita de D kaj C por E. Al la fino de la alfabeto, W estas reprezentita de Y, kaj X per Z. Sed Y ĝi ne havas du literojn post ĝi, do la ĉifroj kovras ĉirkaŭ la alfabeto. Y en plata teksto estas tiel reprezentita de Al en ĉifrita teksto, kaj Z de B. Ĝi povas helpi por vidi kiel la cezaro Cypher kiel kontinua alfabeto rado. Por encipher liaj tekstoj, la uzanto eniros du argumentoj en la komandlinio - . / Cezaro sekvis per ŝlosilo. Kiel ĉiam, ni ne povas fidi la uzanto tute eniri enigo kiuj faras senson por nia programo. Do ni devos validigi siajn komandlinio enigo. Anstataŭ uzi int main malplenon, ni estas uzante int main, int argc, argv kordo. La entjera variablo argc reprezentas la nombro de argumentoj pasis en la komandlinio. Kaj argv estas tabelo, aŭ pensi pri tio kiel listo, el la argumentoj pasis in Do por Cezaro, kiel ni validigi la uzanto eniro? Nu, ili nur devas eniri du komandlinio argumentoj - . / Cezaro kaj ŝlosilo. Do se argc ne 2, kiu signifas, ke ili ankaŭ forgesis ŝlosilon kaj justa eniris. / Cezaro, aŭ ili eniris multnombraj klavoj. Se ĉi tiu estas la kazo, tiam vi deziras presi instrukcioj kaj forlasis la programon. Ili bezonos reprovi de la komandlinio. Sed eĉ se argc estas 2, vi instruos vin bezonas kontroli ĉu ili doni al vi validan ŝlosilon. Por Cezaro, vi bezonas entjero. Sed argv estas tabelo de kordoj. Kiel vi aliri al tiu klavo? Rapida rigardi arrays - datumstrukturoj kiuj entenas multnombrajn valoroj de la sama datumtipo. Elementoj estas nulo-indeksitaj, signifante ke la unua elemento estas la indekso nulo kaj la lasta elemento estas indekso grandeco minus 1, kie grandeco estas la nombro de eroj en la tabelo. Se mi deklaris novan ĉenon tabelo leterkesto de longo 3, vide, ĝi aspektas kiel ĉi tio. Tri ujoj por kordoj , Flanko ĉe flanko. Por aliri al iu ero, vi tajpi la nomon de la tabelo kaj poste indiki la indekso en kvadrataj krampoj. Jen, mi atribui valoron al ĉiu elemento, kiel mi farus kun ajna aliaj kordoj variablo. Do por atingi nian komandlinio argumentoj, ĉiuj ni devas fari estas aliro la dekstra elemento de la argv tabelo. Se la uzanto eniris. / Blastoff Teamo Raketo en la fina stacio, argv 0 farus esti. / blastoff. argv estus Team, kaj arg2 estus raketo. Nun ni povas aliri nian ŝlosilo, ni ankoraŭ bezonos fari certas, ke ĝi estas ĝusta. Ni devas konverti ĝin en entjero. Sed ni ne povas simple jxeti kiel ni faris antaŭe. Bonŝance, la A al Y funkcio prizorgas de ĉi tio por ni kaj eĉ revenas 0 se la kordo ne povas esti konvertita en entjero. Ĝi dependas de vi, kvankam, por diri al la uzanto kial vi ne faros lasu la programon procedi. Stoki la rezulto de A al Y en entjero, kaj tie vi havas vian ŝlosilon. La sekva parto estas simpla. Instigas la uzanto por lia simpla teksto, kiu estos de datumtipo kordo. Feliĉe por ni, ĉiuj uzanto inputted kordoj estas validaj. Nun ke ni havas ĉiujn necesajn enigo de la uzanto, estas tempo por ni encipher lian mesaĝon. La koncepto de Cezaro estas simpla sufiĉe por kompreni. Sed kiel via komputilo scias kion leteroj venas post unu al alia? Tie estas kie la ASCII tablo venas in Ĉiu karaktero havas entjero nombro asociita kun ĝi. Ĉefurbo A estas 65. Ĉefurbo B estas 66. Minuskla a estas 97. Minuskla b estas 98. Sed karakteroj ne estas limigitaj al nur alfabeta nombroj. Ekzemple, la @ simbolo estas ASCII numeron 64. Antaŭ kontraktanta kun la tuta ĉeno, ni ŝajnigi ni nur devas ŝovi, ŝovo unu signo. Nu, ni nur volas ŝanĝi reala literoj en la simpla teksto, ne karakteroj aŭ nombroj. Do la unua aĵo kiun ni volas kontrolu estas ĉu la karaktero estas en la alfabeto. La funkcio isalpha faras tion por ni kaj resendas Bulea - vera se la karakteroj estas litero, malvera se alie. Du aliaj utilaj funkcioj estas isupper kaj islower, kun mem-klarigan nomoj. Ili revenas vera se la donita karaktero estas majuskla aŭ minuskla, respektive. Ĉar ili estas Booleans, ili estas utilaj por uzi kiel kondiĉoj. Se isalpha revenas vera, vi bezonos movi ke karaktero de la ŝlosilo. Do ni malfermu al ASCIIMath kaj faru iujn ASCII math. La uzo estas tre simila al la uzado por Cezaro kaj prenas en ŝlosila en la komandlinio. Se mi kuras ASCIIMath 5, ŝajnas aldoni 5 al a, donante al mi la leteron f, kaj montri la ASCII valoro. Do ni rigardu la programo. Vi povus demandi, ĝuste ĉi tie, kial litero estas entjero, kiam ĝi estas klare, nu, leteron. Ĝi rezultas ke karakteroj kaj entjeroj estas interŝanĝeblaj. Por meti la literon A en sola citiloj, la entjero povas stoki la ASCII valoro de kapitalo A. Atentu, tamen. Vi bezonas la sola vestojn. Sen la sola citiloj, la tradukilo serĉus variablo nomata A, kaj ne la karakteron. Tiam mi aldonas literon kaj ŝlosilo, stokante la sumo en la int variabloj rezulto. Eĉ se rezulto estas de datumtipo entjera, mia printf deklaro uzas la % C lokokupilo por gravuloj. Do la programo presas la karaktero asociita kun la entjera rezulto. Kaj ĉar ni presis la entjero formo tiel uzante% d, ni vidas la nombro tiel. Do nun vi povas vidi, ke ni trakti karakteroj kaj entjeroj, kaj inverse. Ni provo el ASCIIMath kelkaj pli fojoj uzante 25 kiel ŝlosilo. Ni ricevas la literon z. Nun ni provas 26. Ni volas ricevi la literon a, sed anstataŭ ni enmetu maldekstran krampon. Do evidente, nur aldonante la ŝlosilo al la letero ne faros. Ni devas eltrovi formulon por enpaki ĉirkaŭ la alfabeto, kiel nia Ekzemple en la komenco faris. Al formulo por la cezara shift estas kiel sekvas. c egalas p plus k module 26. Memoru ke module estas utila operacion kiu donas al ni la reston la dividadon de unu nombron por la alia. Ni apliki tiun formulon al la ebenaĵo teksto litero kun Ŝlosilo de 2. La ASCII valoro de y estas 89, kiuj donas al ni 91 module 26, kiu egalas 13 - certe ne la ASCII valoro de, kiu estas 67. Humor min nun kaj malproksimigi de la ASCII valoroj al alfabeta indekso kie A estas nulo kaj Z estas 25, signifante ke Y estas 24. 24 plus 2, module 6 donas al ni 26, module 26, 0, kio estas la alfabeta indekso de. Do tiu formulo ŝajnas apliki al la alfabeta indekso de la letero kaj ne lia ASCII valoro. Sed vi komencu per ASCII valoroj. Kaj presi la ĉifrita teksto karaktero, vi bezonos lian ASCII valoro tiel. Ĝi dependas de vi, do por eltrovi kiel ŝanĝi reen. Unufoje vi diveni la rajton formulo por unu signo, ĉiuj vi bezonas fari estas apliki la saman formulon por ĉiu letero en la simpla teksto - nur se tiu letero estas alfabeta, kompreneble. Kaj memoru, ke vi bezonas konservi la kazo, supra aŭ suba, tio estas kie la isUpper kaj isLower funkcioj menciita pli frue venos en oportuna. Vi povus havi du formulojn - unu por majusklajn literojn kaj unu por minuskle. Do isUpper an isLower helpos vin determini kiu formulo apliki. Kiel vi aplikas vian formulon al ĉiu sola karaktero en ĉeno? Nu, ĉeno estas nur tabelo de karakteroj. Do vi povas aliri al ĉiu karaktero de kolektante super ĉiu signo en la kordo en buklo for. Koncerne al la kondiĉo de via por ciklo, la funkcio strlen, por kordoj longitudo, venos en oportuna. Ĝi portas en ĉeno kiel enigo kaj Revenas la longo de tiu linio. Certiĝu por inkludi la dekstra biblioteko uzi la korda longeco funkcio. Kaj jen vi havas vian ĉifrita teksto. Mia nomo estas la Zamyla. Kaj [parolante CODE].