>> ZAMYLA CHAN: Félicitations sur la finition de votre
premier couple de programmes C.
Je sais que votre première incursion dans Syntaxe C peut être intimidant.
Mais je vous assure, à la fin de l' Bien sûr, vous serez en mesure de regarder l'
premier couple de missions et compléter en quelques minutes.
>> Maintenant que vous obtenez plus familier avec la syntaxe, passons à César.
Dans César, l'utilisateur doit soumettre un touche nombre entier en tant que ligne de commande
argumentation, puis entrez une plaine message texte à l'invite.
Le programme sera ensuite chiffrer le texte et impression
leur message chiffré.
>> Le chiffrement de César est assez simple.
Décaler chaque lettre, en leur texte en clair, par la clé.
En conséquence, il est également assez précaire.
Mais d'exécution César présentera nous aux données de ASCIIMath et le réseau
structures.
Nous y reviendrons plus complexe chiffrements plus tard.
Avec une touche de César 2, la lettre A texte brut serait représentée par
la lettre C dans chiffré car C est de deux lettres d'après A. B seraient
représenté par D et C par E. Vers la fin de l'alphabet, W est
représenté par Y, X et Z. Mais par Y ne pas avoir deux lettres après, alors
les chiffres s'enroule autour de l'alphabet.
Y en texte clair est donc représentée par A en texte chiffré, et Z par B. Il peut
aider à voir le César Cypher comme une roue alphabet continue.
>> Pour chiffrer leur texte, l'utilisateur entrera deux arguments
dans la ligne de commande -
. / César suivie par une clé.
Comme toujours, nous ne pouvons pas faire confiance à l'utilisateur complètement pour entrer entrée qui rendent
sens pour notre programme.
Nous aurons donc à valider leur entrée de ligne de commande.
>> Au lieu d'utiliser void main int, nous sommes en utilisant int main, int argc, argv chaîne.
Le argc variable entière représente le nombre d'arguments passés en
la ligne de commande.
Et argv est un tableau, ou penser que c'est une liste des arguments passés po
>> Donc, pour César, comment pouvons-nous validons l'entrée de l'utilisateur?
Eh bien, ils ne devraient être entraient deux arguments de ligne de commande -
. / César et une clé.
Donc, si argc n'est pas 2, ce qui signifie que soit ils ont oublié une clé et juste
entré. / César, ou ils conclu plusieurs touches.
>> Si c'est le cas, alors vous aurez voulez imprimer les instructions
et quitter le programme.
Ils auront besoin d'essayer à nouveau à partir de la ligne de commande.
Mais même si argc est 2, vous aurez besoin de vérifier si elles
vous donnera une clé valide.
Pour César, vous avez besoin d'un entier.
Mais argv est un tableau de chaînes.
Comment accéder à cette clé?
>> Un rapide regard sur les tableaux -
des structures de données qui possèdent multiple valeurs du même type de données.
Les inscriptions sont à l'index zéro, ce qui signifie que le premier élément est le zéro de l'index
et le dernier élément est à la taille de l'index moins 1, où la taille correspond au nombre d'
éléments dans le tableau.
>> Si je déclarais une nouvelle boîte aux lettres de tableau de chaînes de longueur 3, visuellement, il
ressemble à ceci.
Trois conteneurs pour cordes , Côte à côte.
Pour accéder à n'importe quel élément, vous tapez le nom du tableau, puis indiquer
l'indice entre crochets.
Ici, je suis en attribuant une valeur à chaque élément, tout comme je le ferais avec n'importe quelle
autre variable chaîne.
>> Donc, pour accéder à nos arguments de ligne de commande, tout ce que nous avons à faire est d'accéder
l'élément à droite du tableau argv.
Si l'utilisateur a entré l'équipe. / De décollage Rocket dans le terminal, argv 0 Souhaitez-
être. / décollage.
argv serait l'équipe, et arg2 serait fusée.
>> Maintenant que nous pouvons accéder à notre clé, nous avons encore besoin de faire
sûr que c'est correct.
Nous avons besoin de le convertir en un entier.
Mais nous ne pouvons pas simplement jeter comme nous l'avons fait précédemment.
Heureusement, la fonction A à Y prend soin de cela pour nous et retourne même 0
si la chaîne de caractères ne peut pas être convertie en un nombre entier.
C'est à vous, cependant, de dire l'utilisateur pourquoi vous ne serez pas
laisser le programme continuer.
Stocker le résultat de A à Y dans un entier, et là vous avez votre clé.
La partie suivante est simple.
Inviter l'utilisateur à leur texte, qui sera de type chaîne de données.
Heureusement pour nous, tout utilisateur entré cordes sont valables.
>> Maintenant que nous avons toutes les ressources nécessaires de l'utilisateur, il est temps pour nous d'
chiffrer leur message.
Le concept de César est simple suffisant pour comprendre.
Mais comment est-ce votre ordinateur sait qui lettres viennent un après l'autre?
>> C'est ici que la table ASCII entre en jeu.
Chaque personnage dispose d'un nombre entier nombre qui lui est associé.
Capital A est de 65.
Capital B est de 66.
A minuscule est de 97.
B minuscule est de 98.
Mais les caractères ne sont pas limités au-delà des chiffres alphabétiques.
Par exemple, le symbole @ est le numéro ASCII 64.
>> Avant d'aborder la totalité de la chaîne, feignons que nous venons de passer
un caractère.
Eh bien, nous ne voulons décaler réelle lettres dans le texte en clair, pas
caractères ou des chiffres.
Donc la première chose que nous voulons vérifier est de savoir si le personnage est en
l'alphabet.
>> La fonction isalpha fait pour nous et retourne un Boolean -
vrai si les caractères est une lettre, faux dans le cas contraire.
Deux autres fonctions utiles sont isupper et islower, avec
noms explicites.
Ils retournent true si le caractère donné est en majuscule ou en minuscule,
respectivement.
Comme ils sont booléens, ils sont utile pour l'utiliser comme conditions.
>> Si isalpha renvoie vrai, vous aurez besoin pour passer ce caractère par la clé.
Donc, nous allons ouvrir à ASCIIMath et faire un peu de maths ASCII.
L'utilisation est très similaire à l'utilisation pour César et prend une clé à l'
la ligne de commande.
>> Si je cours ASCIIMath 5, il semble ajouter 5 à un, en me donnant la lettre f, et
l'affichage de la valeur ASCII.
Donc, nous allons jeter un oeil à ce programme.
>> Vous pourriez vous demander, ici, pourquoi lettre est un entier, quand il est
clairement, eh bien, une lettre.
Il s'avère que les personnages et entiers sont interchangeables.
En mettant la lettre A en simple entre guillemets, l'entier peuvent stocker
la valeur ASCII du capital A. Attention, cependant.
Vous avez besoin des vêtements simples.
Sans les guillemets simples, l' compilateur aurait l'air d'une variable
Un nommé, et non pas le caractère.
>> Puis j'ajoute lettre et une clé, stockage de l' somme dans les variables résultat int.
Même si résultat est de type de données entier, ma déclaration printf utilise l'
% C espace réservé pour les personnages.
Ainsi, le programme imprime le caractère associée au résultat entier.
Et puisque nous avons imprimé l'entier forme ainsi utiliser% d, nous voyons
le nombre ainsi.
Alors maintenant, vous pouvez voir que nous traiter les caractères et
des nombres entiers, et vice versa.
>> Testons sur ASCIIMath quelques plus de 25 fois à une utilisation en tant que clé.
Nous recevons la lettre z.
Maintenant, nous essayons de 26.
Nous voulons obtenir la lettre A, mais au contraire, nous obtenons un crochet gauche.
Alors, évidemment, tout en ajoutant le la clé de la lettre ne fera pas.
Nous devons trouver une formule pour envelopper autour de l'alphabet, comme notre
par exemple au début a fait.
>> Une formule pour le César changement est comme suit.
c est égal à p, plus k modulo 26.
Rappelez-vous que modulo est un utile opération qui nous donne le reste
de division d'un nombre par l'autre.
Nous allons appliquer cette formule à la plaine lettre de texte avec une clé de 2.
La valeur ASCII de y est de 89, ce qui nous donne 91 modulo 26,
ce qui équivaut à 13 -
certainement pas la valeur ASCII d'un, qui est 67.
>> Humour moi maintenant et s'éloigner de l' Les valeurs ASCII à un index alphabétique
où A est égal à zéro et Z est 25, ce qui signifie que Y est 24.
24 plus 2, modulo 6, nous donne 26, modulo 26, 0, qui est le
index alphabétique d'un.
Donc, cette formule semble s'appliquer à l' index alphabétique de la lettre et
pas sa valeur ASCII.
>> Mais vous commencez avec des valeurs ASCII.
Et pour imprimer le caractère chiffré, vous aurez besoin de sa valeur ASCII ainsi.
C'est à vous, alors, de comprendre comment basculer d'avant en arrière.
>> Une fois que vous trouver la bonne formule pour un caractère, tout ce que vous devez faire
est d'appliquer la même formule pour tous lettre dans le texte en clair -
seulement si cette lettre est alphabétique, bien sûr.
Et n'oubliez pas que vous devez préserver le cas, supérieure ou inférieure, c'est là
les fonctions de IsLower isUpper et mentionné précédemment vous seront utiles.
Vous pourriez avoir deux formules -
un pour les lettres majuscules et l'autre pour les minuscules.
Alors isUpper un IsLower vous aider déterminer quelle est la formule à appliquer.
>> Comment appliquez-vous votre formule à chaque seul caractère dans une chaîne?
Eh bien, une chaîne est juste une tableau de caractères.
Ainsi, vous pouvez accéder à chaque caractère par regroupant plus tous les caractères de l'
chaîne dans une boucle for.
En ce qui concerne l'état de votre boucle for, la fonction strlen, pour la chaîne
Enfin, vous sera utile.
Il faut dans une chaîne en entrée et renvoie la longueur de cette chaîne.
Assurez-vous d'inclure le droit bibliothèque Pour utiliser la fonction de longueur de chaîne.
>> Et là, vous avez votre texte chiffré.
Mon nom est le Zamyla.
Et [CODE DE LANGUE].