Bonjour et bienvenue. Dans cette conférence, je vais
fournir une démonstration d'une solution pour notre défi précédent.
Je vais vous expliquer comment inverser les caractères
d'une chaîne à l'aide de la fonction de longueur de
chaîne et passer par le tri des chaînes à l'aide de la
comparaison de chaînes et de la copie de chaînes, ainsi
que de l'algorithme à bulles.
Faisons apparaître des blocs de code.
Et je vais juste créer un programme unique, je pense pour cela. J'ai mentionné dans le
défi que vous créez deux programmes.
Mais pour des raisons de simplicité et de démonstration, je vais juste en créer un seul.
Créez un
projet, je vais juste le nommer
des fonctions de chaîne ou une variante de cela.
Appelons cela un exemple de fonctions de
chaîne courantes.
Commençons donc par l'inverse. L'inverse peut avoir sa propre fonction ou nous
pouvons simplement le mettre dans le principal. J'allais le mettre dans le principal.
Donc, la première chose que je veux faire est de créer un - eh bien, la première
chose que je veux faire est que je veux inclure le fichier d'en-tête correct afin que je puisse utiliser
ces fonctions de chaîne, qui est ma chaîne d'inclusion. h.
C'est là qu'il contient toutes les belles fonctions de chaîne.
Maintenant, je vais créer un tableau de caractères. Je vais en faire une taille 100.
C'est juste arbitraire, il ne
sera tout simplement pas possible de stocker des éléments supérieurs à 100.
Je vais créer quelques variables locales qui
m'aideront dans mon analyse. Et ce que je veux faire, c'est
que je veux d'abord afficher une sortie à l'utilisateur.
Je vais donc simplement dire quelques sauts
de ligne, imprimer des
caractères individuels et individuels de chaîne et dans l'ordre inverse.
Cela dira à l'utilisateur ce qui se passe et ensuite l'imprimera juste pour
le rendre plus apparent, imprimez simplement quelque
chose comme ça, donc c'est plus facile à lire.
Je vais dire entrez la chaîne. Je vais lire dans la chaîne.
Et puis je vais stocker la chaîne.
Alors je vais
dire scanf, present s et je vais dire str.
Et je n'ai pas besoin de passer l'esperluette pour la lire.
Ensuite, je vais obtenir la longueur de la chaîne. Je vais mettre cela dans ma variable locale.
Je peux donc appeler str link en disant simplement la longueur de la chaîne en passant la
chaîne, et cela renvoie le nombre de caractères de cette chaîne. Très, très facile.
Et puis je vais imprimer quelque chose pour leur dire que les personnages sont dans l'ordre inverse.
Donc, les caractères de la chaîne
en inverse r anti-slash n.
Ensuite, je vais écrire une jolie petite boucle for qui
parcourt mon tableau et en fonction de la longueur et l'inverse simplement.
Je vais donc dire que je suis égal à l.
Je vais donc revenir en arrière dans le tableau
de chaînes actuel. Je vais commencer par la fin et aller de l'avant.
Et disons que je suis supérieur ou égal
à 0 et je moins moins. Et vous remarquez que je n'ai pas à regarder
les caractères de terminaison nuls lorsque je le fais de cette façon.
Ensuite, je vais simplement imprimer chaque personnage au fur et à mesure que je le rencontre.
Pour imprimer un caractère et voir que vous faites juste le pourcentage c.
Et faites cela et dites str sous-I.
Et c'est fondamentalement ça.
Et puis je vais simplement imprimer une nouvelle ligne.
Et en fait, je vais imprimer un tas de choses juste pour y mettre fin,
un tas de tirets.
Voyons si cela fonctionne, très facile celui-ci en fait comme il se
doit, pour obtenir la longueur ne devrait pas être difficile.
Et j'ai oublié un saut de ligne, alors corrigeons ça.
Donc, ici, il est indiqué d'imprimer les caractères individuels de la chaîne en sens inverse ou d'entrer la chaîne.
Maintenant, scanf, il ne fera que lire. Donc, si j'entre dans l'espace Jason Feden.
Scanf ne lira que Jason et l'espace.
Vous voudriez utiliser une autre fonction comme f get s si vous vouliez lire le tout.
Donc, ce que cela va faire, c'est simplement inverser Jason imprimer
nosaj, ce qu'il fait. Les caractères de la chaîne reverse sont nosaj.
C'est assez simple, pas une fonction ou une implémentation
très compliquée.
Maintenant, essayons-le en triant une chaîne.
Et donc maintenant je vais faire quelque chose. Et je vais le faire dans l'ensemble, je suppose juste pour l'instant.
Je devrais les mettre dans des fonctions réelles, mais nous ne démontrons
pas de fonctions dans cette conférence, nous montrons des chaînes.
Créons donc quelques variables locales supplémentaires dont nous aurons besoin.
Principalement, nous allons créer un nom.
Et dans ce cas,
j'allais créer un tableau de chaînes. Nous allons créer un tableau de chaînes, et nous utiliserons f get s.
Je vais créer un tableau de chaînes. Cela ressemble donc à un
tableau à deux dimensions.
Donc, ce que nous faisons ici, c'est que nous créons 25 chaînes de taille 50.
Ensuite, je vais également en créer un autre de seulement 25,
il contiendra chaque chaîne.
Et puis je vais ajouter
deux autres variables. Je vais ajouter un n et un j.
Et donc après avoir fait notre revers, je vais imprimer.
Un autre message pour
dire ce que nous faisons trie
les chaînes d'un tableau en utilisant le tri à bulles.
Je ne vais pas vous expliquer le tri des bulles. Car encore une fois, ce n'est qu'un algorithme qui n'est pas pertinent
par rapport à ce que nous faisons. Vraiment, c'est juste un moyen de trier.
C'est l'un des types les plus faciles en fait parce que vous échangez simplement.
Mais ce que nous voulons faire, c'est d'abord savoir combien de chaînes ils vont entrer. Nous allons donc dire
le nombre de
chaînes d'entrée printf, puis nous allons dire scanf.
Scanf peut être utilisé ici car ce n'est qu'un nombre.
Nous allons dire pour cent d, et nous allons stocker cela dans notre variable locale n.
Encore une fois, je sais que je n'utilise pas de
grands noms ici, mais je montre quelque chose. Puisque c'est un c'est, il faut passer dans l'esperluette.
Ensuite, je vais leur demander d'entrer les chaînes.
Donc, ici, je
vais dire la chaîne
d'entrée 1 2 ou 3 suivie d'un saut de ligne.
Ce sera juste le nombre qu'ils doivent entrer.
Chaîne un, chaîne deux ou chaîne trois.
Ensuite, j'aurai en fait une boucle qui passe et obtient l'entrée.
Donc, ici, je vais dire que je suis égal
à 0, je est inférieur à n pour le nombre de chaînes
qu'ils veulent entrer et je plus plus ou plus plus I.
Ici, je vais en fait lire la chaîne, et je vais utiliser une manière différente de
lire - je pensais utiliser f get s, afin que vous
puissiez entrer dans une chaîne contenant des espaces. Mais je ne pense pas que nous en ayons besoin.
Nous analysons f,
et nous allons lire dans scanf dans notre tableau
de noms.
N'oubliez pas que nous avons un nom et qu'il s'agit d'une chaîne de
chaînes de 25 caractères.
Les 50 caractères 25 mots.
Le nombre maximum de mots que vous pouvez saisir est donc de 25.
Nous allons donc stocker cela dans
notre tableau de noms. Nous allons donc simplement dire scanf.
Nous allons lire dans une chaîne, et nous allons le mettre
sous le nom I.
Et donc nous avons stocké nos tableaux, nous ne pouvons en stocker que 25.
Maintenant, nous en avons terminé avec notre boucle et maintenant nous pouvons simplement écrire notre tri à bulles.
Et donc notre sorte de bulle, je ne vais pas vous expliquer, je vais juste vous dire que
c'est un algorithme assez simple qui a une boucle interne.
Donc, vous avez une boucle for qui passe, I est égal à 1 à
travers toutes les chaînes.
Et puis dans votre boucle intérieure, vous passez de zéro à toutes
les chaînes moins un. Et vous comparez cette première chaîne à toutes les autres chaînes.
Et vous les faites essentiellement exploser. Mais ce qui est
important ici, c'est la fonction de comparaison str.
Permettez-moi juste d'essayer d'obtenir cette indentation correctement dans
les fonctions de copie de str, c'est vraiment ce qui est important.
Vous remarquerez que je n'ai pas de parenthèses de fin pour les quatre parce
qu'ils ont des instructions simples.
Même si ce if a quelque chose dans son corps if, ce n'est qu'une déclaration.
Nous partons donc de la comparaison de chaque mot à chaque autre mot
essentiellement après en avoir comparé un auparavant.
Donc, nous disons si str compare le nom sous j et
le nom sous j sous un, donc str
compare prend deux arguments, deux tableaux
de caractères, des pointeurs de
caractères vraiment.
Et s'ils sont égaux, il retournera zéro.
Si le premier paramètre est inférieur
au deuxième paramètre, il retournera
moins de zéro.
Et si le premier paramètre est supérieur au deuxième
paramètre, il retournera supérieur à zéro, un.
Donc, ce que cela signifie, c'est que si la première chaîne est supérieure à la deuxième
chaîne, nous voulons tout échanger. Et c'est pourquoi nous avons cette température.
Temp stocke en fait une chaîne temporaire temporaire.
Nous mettons donc le nom temporaire sous j, puis
nous échangeons le nom sous j avec les noms j plus un.
C'est ainsi que fonctionne le tri à bulles. Encore une fois, ce qui est important ici, c'est str compare et str copy.
Et si vous êtes en sécurité, vous voudrez utiliser strn compare.
Et quand vous comparez. Eh bien, en fait strn compare,
vous ne vous souciez pas parce que ce n'est que si vous voulez comparer le préfixe.
Pour la copie str, vous souhaitez en fait utiliser la copie strn.
Et ce troisième paramètre est ce qui est important.
Donc, strn copy, vous voulez seulement vous assurer de ne pas copier plus
que la taille de temp, moins un car sinon vous avez un dépassement de tampon.
Donc, vous voudriez tout cela, vous pouvez également utiliser - si ce
n'était pas un tampon de caractères, vous voudrez probablement utiliser la longueur
de chaîne s'il s'agissait d'un pointeur. Mais la taille de fonctionnera bien pour cela.
Et encore une fois, cela éliminera tout dépassement de tampon.
Il est donc toujours plus sûr d'utiliser une copie strn et
une copie parce que nous avons notre terminateur nul qui doit aller à la fin.
Donc, ici, c'est juste la destination source pour la copie strn.
Nous copions le nom sous j dans temp et la même chose avec les noms j
plus un et le nom sous j. Et puis enfin, temp dans les noms sous
j plus un. Et je dois en
fait mettre à jour ces variables parce qu'elles sont
fausses car elles doivent toujours être la source. Alors nommez ici le nom sous j.
Et puis le dernier serait les
noms de j plus un, j plus un.
Donc, c'est strn copy et str compare, des fonctions très faciles à utiliser.
Une fois que nous les avons triés, nous voulons simplement les imprimer.
Nous voulons donc dire que les chaînes apparaissent après le
tri, les mettre
en saut de ligne, puis passer par
une boucle
pour imprimer toutes les chaînes de notre tableau.
Nous disons donc que 4 I est égal à 0.
I est inférieur ou égal à n car le n représente
le nombre de chaînes que nous avons triées et entrées.
Ensuite, nous voulons simplement parcourir notre chaîne de tableaux de chaînes.
Nous voulons donc dire le saut de ligne
de printf et le nom du sous-I.
Donc name sub I est en fait notre tableau trié, c'est pourquoi nous avons eu
des noms name sub I.
Même si nous n'avons pas le second car cela représente la taille de chaque caractère.
25 mots de 50 max.
Voyons donc si cela fonctionne.
Construisez-le, j'ai quelques messages parce que je ne sais pas comment épeler.
Et si nous exécutons ceci. Nous allons d'abord exécuter notre fonction inverse pour que vous
puissiez le voir à nouveau car nous l'avons inclus dans le même programme.
Dites que Fedin et idf c'est bien.
Saisissez le nombre de chaînes à trier. Disons cinq, disons zzzz
juste pour que ce soit clair, quelque chose comme
ça.
J'ai un peu foiré là-bas, mais on dirait que ça s'est arrangé, a b d f r z.
Donc ça marche. J'ai un bug
cependant parce que la chaîne d'entrée percent d.
J'entre le nombre de chaînes dans n et puis je dis moins
qu'égal, je devrais juste dire moins que.
Alors répétons-le juste pour le démontrer, mais je dois le construire.
N'oubliez pas de construire après avoir changé les choses.
Encore une fois, nous dirons n'importe quoi ici, puis des
chaînes de nombres. Faisons
juste quatre.
Alors ils les classent par ordre alphabétique et disent d e l z, ça a l'air bien.
Vous pouvez donc certainement améliorer ce code où vous pourriez vouloir tout
mettre en fonctions, le rendre plus modulaire. Mais ce que j'essaie de comprendre avec cette
affectation, c'est comment vous utilisez str compare, comment vous utilisez strn copy et comment
vous pouvez utiliser str length.
Vous devriez également jouer avec le chat str,
le chat strn et c'est l'autre vraie fonction commune.
Vous voudrez peut-être jouer avec strstr, strchar pour la recherche. Celles-ci sont vraiment, vraiment
bonnes ou les fonctions est, supérieure est, inférieure pour vérifier les caractères,
ou les fonctions de conversion atoi nad atof.
Merci. J'espère que cela a été utile.