ZAMYLA CHAN: Congratulazioni sulla rifinitura del vostro primo paio di programmi in C. So che la vostra prima incursione Sintassi del C può essere scoraggiante. Ma vi assicuro che, alla fine del Naturalmente, sarete in grado di guardare al primo paio di incarichi e completarli in pochi minuti. Ora che stai ricevendo più familiare con la sintassi, andiamo a Cesare. In Cesare, l'utente presenterà una chiave intero come una riga di comando argomento, quindi immettere una pianura messaggio di testo al prompt. Il programma sarà poi cifrare il testo e stampa il loro messaggio cifrato. La cifratura di Cesare è abbastanza semplice. Spostare ogni lettera, nella loro testo normale, dalla chiave. Come risultato, è anche piuttosto insicuro. Ma l'implementazione di Cesare introdurrà noi di dati ASCIIMath e la matrice strutture. Ci arriveremo più complesso cifrari più tardi. Con una chiave di Cesare 2, la lettera A in testo normale sarebbe rappresentato da la lettera C nel testo cifrato causa C è di due lettere dopo A. B sarebbero rappresentato da D e C da E. Verso la fine dell'alfabeto, W è rappresentato da Y, X e Y da Z. Ma non ha due lettere dopo di esso, così le cifre avvolge l'alfabeto. Y in testo normale è quindi rappresentato da A in testo cifrato, e Z da B. Esso può ? per visualizzare la Cesare Cypher come una ruota alfabeto continuo. Per cifrare loro testo, l'utente entrerà due argomenti nella riga di comando - . / Caesar seguito da un tasto. Come sempre, non possiamo fidarci l'utente completamente per entrare input che rendono senso per il nostro programma. Quindi saremo costretti a convalidare la loro ingresso di linea di comando. Invece di usare int void main, siamo utilizzando int main, int argc, argv stringa. Il numero intero argc variabile rappresenta il numero di argomenti passati in la riga di comando. E argv è un array, o pensare ad esso come un elenco, degli argomenti passati dentro Così, per Cesare, come possiamo validare l'input dell'utente? Beh, dovrebbero essere entrando solo due argomenti della riga di comando - . / Caesar e una chiave. Quindi se argc non è 2, ciò significa che essi o dimenticato una chiave e solo inserito. / Cesare, o entrato più chiavi. Se questo è il caso, allora si dovrà consiglia di stampare le istruzioni e uscire dal programma. Avranno bisogno di provare di nuovo dalla riga di comando. Ma anche se argc è 2, ti necessario verificare se essi vi darà una chiave valida. Per Cesare, hai bisogno di un numero intero. Ma argv è un array di stringhe. Come si accede quella chiave? Un rapido sguardo a matrici - strutture dati che contengono più valori dello stesso tipo di dati. Le iscrizioni sono indice a base zero, il che significa che il primo elemento è l'indice zero e l'ultimo elemento è a dimensione dell'indice meno 1, dove size è il numero di elementi dell'array. Se ho dichiarato una nuova cassetta postale array di stringhe di lunghezza 3, visivamente, si presenta così. Tre contenitori per le stringhe , Fianco a fianco. Per accedere a qualsiasi elemento, si digita il nome della matrice e quindi indicare l'indice tra parentesi quadre. Ecco, sto assegnando un valore ad ogni elemento, proprio come avrei fatto con qualsiasi altra variabile stringa. Quindi, per accedere ai nostri argomenti della riga di comando, tutto quello che dobbiamo fare è accedere l'elemento destro della matrice argv. Se l'utente ha inserito. / Blastoff squadra Rocket nel terminale, argv 0 sarebbe essere. / blastoff. argv sarebbe Team, e arg2 sarebbe razzo. Ora che siamo in grado di accedere al nostro tasto, abbiamo ancora bisogno di fare sicuri che sia corretta. Abbiamo bisogno di convertirlo in un numero intero. Ma non possiamo semplicemente gettare come abbiamo fatto in precedenza. Per fortuna, la A per funzione Y si prende cura di questo per noi e anche restituisce 0 Se la stringa non può essere convertita in un numero intero. Tocca a te, anche se, a dire l'utente per cui non si lasciare che il programma procede. Memorizzare il risultato di A a Y in un numero intero, e non vi hai la tua chiave. La parte successiva è semplice. Richiedere all'utente il loro testo, che sarà di tipo stringa di dati. Fortunatamente per noi, tutti gli utenti immessi stringhe sono valide. Ora che abbiamo tutte le risorse necessarie da parte dell'utente, è il momento per noi di cifrare il loro messaggio. Il concetto di Cesare è semplice abbastanza per capire. Ma come fa sapere il computer che lettere arrivano uno dopo l'altro? Ecco dove la tabella ASCII entra in gioco Ogni personaggio ha un numero intero numero ad esso associati. Maiuscola è 65. Capital B è 66. Le lettere minuscole sono 97. Minuscolo b è 98. Caratteri ma non sono limitati al solo numeri alfabetici. Ad esempio, il simbolo @ è il numero ASCII 64. Prima di affrontare l'intera stringa, facciamo finta non ci resta che spostare un carattere. Beh, vogliamo solo a spostare reale lettere nel testo normale, non caratteri o numeri. Quindi la prima cosa che dobbiamo provare a verificare è se il personaggio è in l'alfabeto. Il isalpha funzione lo fa per noi e restituisce un valore booleano - true se i caratteri è una lettera, false se altrimenti. Altre due utili funzioni sono isupper e islower, con nomi auto-esplicativi. Tornano true se il carattere dato è maiuscolo o minuscolo, rispettivamente. Dal momento che sono booleani, sono utile utilizzare come condizioni. Se isalpha restituisce true, è necessario di spostare tale carattere dalla chiave. Quindi apriamo a ASCIIMath e fare un po 'di matematica ASCII. L'utilizzo è molto simile all'uso per Cesare e prende in una chiave al riga di comando. Se corro ASCIIMath 5, sembra aggiungere 5 per una, dandomi la lettera f, e la visualizzazione del valore ASCII. Quindi, diamo uno sguardo al programma. Ci si potrebbe chiedere, proprio qui, perché lettera è un numero intero, quando è chiaramente, bene, una lettera. Si scopre che i personaggi e le interi sono intercambiabili. Apponendo la lettera A in un'unica virgolette, il numero intero in grado di memorizzare il valore ASCII del capitale A. Attenzione, però. Avete bisogno dei singoli vestiti. Senza le virgolette singole, il compilatore sarebbe per una variabile denominati A, e non il personaggio. Poi aggiungo lettera e una chiave, la memorizzazione del somma del risultato variabili int. Anche se risultato è di tipo dati numero intero, la mia dichiarazione printf utilizza il % C segnaposto per i caratteri. Quindi, il programma stampa il carattere associato al risultato intero. E dal momento che abbiamo stampato il numero intero forma e utilizzando% d, vediamo il numero pure. Così ora si può vedere che ci trattare i personaggi e numeri interi, e viceversa. Diamo prova fuori ASCIIMath alcuni altre volte usando 25 come chiave. Riceviamo la lettera z. Adesso cerchiamo 26. Vogliamo ottenere la lettera a, ma invece otteniamo una parentesi sinistra. Così, ovviamente, solo l'aggiunta del chiave per la lettera non lo farà. Abbiamo bisogno di capire una formula per avvolgere intorno l'alfabeto, come il nostro esempio in principio ha fatto. Una formula per il Cesare spostamento è il seguente. c è uguale a p + k modulo 26. Ricordate che il modulo è un utile operazione che ci dà il resto della divisione di un numero per l'altro. Proviamo ad applicare questa formula per la pianura lettera del testo con una chiave di 2. Il valore ASCII di y è 89, che ci dà 91 modulo 26, che è uguale a 13 - sicuramente non il valore ASCII di una, che è 67. Umorismo me ora e allontanarsi dal Valori ASCII ad un indice alfabetico dove A è zero e Z è 25, il che significa che Y è 24. 24 più 2, modulo 6, ci dà 26, modulo 26, 0, che è la indice alfabetico di una. Pertanto questa formula sembra applicarsi alla indice alfabetico della lettera e non il suo valore ASCII. Ma si inizia con valori ASCII. E per stampare il carattere cifrato, sarà necessario il suo valore ASCII pure. Sta a voi, allora, di capire come passare avanti e indietro. Una volta a capire la formula giusta per un solo carattere, tutto quello che dovete fare si applica la stessa formula di ogni lettera nel testo - solo se tale lettera è alfabetico, ovviamente. E ricordate che è necessario per preservare il caso, superiore o inferiore, è lì il isupper e funzioni islower detto in precedenza sarà utile. Si potrebbe avere due formule - uno per le lettere maiuscole e uno per minuscolo. Così isupper un Minuscolo vi aiuterà determinare quale formula da applicare. Come si applica la formula di ogni singolo carattere in una stringa? Beh, una stringa è solo un array di caratteri. Così si può accedere a ogni personaggio raggruppando su ogni personaggio del stringa in un ciclo for. Per quanto riguarda la condizione del tuo ciclo for, la funzione strlen, per stringa lunghezza, sarà utile. Ci vuole in una stringa come input e restituisce la lunghezza della stringa. Assicurati di includere la libreria giusta Per utilizzare la funzione lunghezza della stringa. E ci hai il tuo testo cifrato. Il mio nome è il Zamyla. E [CODICE PARLANTE].