Bonjour et bienvenue à nouveau. Dans cette conférence, je veux commencer à parler des fonctions de chaîne.
J'ai mentionné plus tôt que
les chaînes, les tableaux de caractères ne sont pas
un type de données variable dans c.
Vous pouvez donc utiliser n'importe lequel des opérateurs,
mais vous devrez toujours être capable de faire beaucoup de choses sur des chaînes.
Vous allez pouvoir les manipuler.
Vous allez vouloir avoir la longueur. Vous voulez les
comparer, toutes sortes de choses les convertissent probablement.
Heureusement, la bibliothèque standard est livrée avec un tas de fonctions
que vous pouvez utiliser pour effectuer ce type d'opérations.
Je vais commencer par parler de certains des plus courants,
puis nous passerons à d'autres plus spécifiques dans d'autres conférences.
Nous savons donc déjà qu'une chaîne de
caractères est un tableau de caractères terminé par un caractère nul.
Les chaînes de caractères sont couramment utilisées dans les programmes c.
C fournit heureusement de nombreuses fonctions spécialement conçues pour fonctionner avec des chaînes.
Ceux dont nous allons discuter sont les plus courants que vous utiliserez.
Tout d'abord, obtenir la longueur d'une chaîne à l'aide de la fonction de longueur de chaîne.
Copie d'une chaîne de caractères dans une autre.
N'oubliez pas que je vous ai dit plus tôt que vous ne pouvez pas utiliser l'opérateur d'affectation pour attribuer une chaîne.
Donc, ce que vous faites est d'utiliser une copie str ou une copie strn.
En outre, combiner deux chaînes de caractères ensemble, concaténation.
Il y a un chat str et un chat strn.
Et déterminer si deux chaînes de caractères sont égales.
Encore une fois, l'opérateur égal à égal ne fonctionnera pas pour comparer des chaînes
car ce sont des tableaux.
Donc, si vous voulez comparer des chaînes, vous devez utiliser des fonctions
spéciales fournies par la bibliothèque c. Str compare et strn compare.
Parlons d'abord de la longueur.
Toutes ces fonctions sont définies dans la chaîne. d'en-tête, vous devez donc l'inclure
lorsque vous appelez ou invoquez l'une de ces fonctions.
Obtenir la longueur d'une chaîne.
Str length est une fonction qui trouve la longueur de la chaîne, c'est assez simple.
Il est renvoyé sous forme de variable de taille t.
Vous pouvez à peu près utiliser la variable size t de manière interchangeable avec un int.
Mais d'abord, vous devrez inclure ce fichier d'en-tête de chaîne si vous souhaitez utiliser la longueur de chaîne
et voici comment vous l'utilisez.
Vous créez essentiellement une chaîne littérale entre guillemets doubles et vous l'assignez à un tableau de caractères.
Vous ne spécifiez pas la taille du tableau de caractères.
Le compilateur le fera pour vous et ajoutera le terminateur nul.
Une fois que vous avez défini ma chaîne avec
une constante de chaîne, vous pouvez alors appeler str length et simplement passer ce caractère, ce
qui est plutôt sympa.
C'est l'un des plus souvent utilisés car vous voulez souvent obtenir cette longueur de chaîne lorsque vous effectuez
des vérifications de validation ou quoi que ce soit vraiment si vous
voulez vous assurer qu'il n'y a pas de débordement de tampon, vous pouvez le faire aussi.
Cette fonction change la chaîne.
Ainsi, l'en-tête de la fonction n'utilise pas de constante
pour déclarer la chaîne de paramètres formels.
Si vous deviez aller regarder la chaîne. h à
l'intérieur de l'inclusion de l'utilisateur dans votre répertoire, vous verriez qu'il
n'est pas défini comme une constante.
Copie de chaînes. La copie de
chaînes modifie une chaîne existante, soit
un tableau de caractères existant contenant des données.
Ou s'il n'y a rien dedans, vous voulez y mettre quelque chose.
Puisque vous ne pouvez pas affecter une augmentation en c, vous ne pouvez pas non plus affecter de chaînes. Je l'ai mentionné plus tôt,
déclarer un caractère puis utiliser l'opérateur d'affectation égal ne fonctionne pas.
Vous devez donc utiliser la fonction str copy pour copier
une chaîne dans une chaîne existante.
C'est l'équivalent d'un opérateur pour les chaînes, opérateur d'affectation.
Si nous déclarons la source et la destination de deux tableaux de
caractères, tout ce que nous devons faire est de dire str copy source, puis
quelle que soit la source, nous pouvons mettre la chaîne et la
même chose avec la destination.
Vous pouvez également y insérer des variables si vous souhaitez les copier.
Mais ce que nous faisons ici est le premier paramètre est l'endroit où vous copiez.
Le deuxième paramètre est la chaîne que vous copiez.
Ainsi, la source aurait cette source à l'intérieur après la copie de str.
La destination ou le dest aurait cette destination à l'intérieur
après l'appel de copie de str.
La fonction de copie str ne vérifie pas si la chaîne source tient réellement dans la chaîne cible.
Alors que se passerait-il si vous aviez une grosse corde.
Donc, dans cet exemple précédent, que se passerait-il si une destination contenait 100 caractères.
Et au lieu d'avoir cela comme destination, il y avait 100 caractères.
Vous avez essayé de le copier dans une
source qui ne contenait que 50 caractères. Il y aurait un problème.
La chaîne de destination serait plus grande que la chaîne source que vous copiez.
Donc, si nous essayions de copier la copie str dans la source au lieu de la copier en tant que source
que nous insérons, elle provient de cinq ou dix fois quelle qu'elle soit et une sur 50, il
y aurait une erreur.
Et je vais le démontrer.
Donc, un moyen plus sûr de copier des chaînes est d'utiliser la copie strn. Vous remarquerez que n peut être transformé
en copie strn.
La copie de Strn prend un troisième argument.
Le nombre maximum de caractères à copier.
Vous spécifiez donc ici la quantité que vous souhaitez copier.
Donc, si vous avez une source de 40 et une destination de 12 tailles, vous pouvez d'abord
faire un ensemble m qui ne fait que définir la taille des données à l'intérieur d'une destination sur des
terminateurs nuls de cette façon lorsque vous ajoutez quelque chose, il sera automatiquement là, don ne t'inquiète pas pour ça.
La copie str va copier bonjour comment allez-vous vers la source, et elle ne va
pas vérifier si comment vous faites est plus grande que la source.
Mais si vous faites une copie strn et que vous copiez dans
une destination, cela va copier la source et ne copier que les 10 premiers caractères.
Donc, ce troisième argument doit correspondre à la taille de la destination.
Alors allons dans les blocs de code et regardons la longueur de la chaîne et regardons la copie des
chaînes pour voir exactement comment elles fonctionnent.
Alors ici, nous avons notre principal.
Et obtenir la chaîne de longueur de chaîne est vraiment facile.
Nous allons créer notre tableau de caractères. Nous savons créer une zone de personnage. Nous ne voulons pas spécifier la
taille, mais nous devons mettre le nom en premier, puis les crochets.
Et puis nous pouvons l'initialiser avec ce que
nous voulons, disons entre guillemets. Les guillemets doubles représentent les littéraux de chaîne.
Je peux donc simplement dire que je m'appelle Jason.
Le résultat final est que s
va être un tableau de
17 caractères.
Tous ces caractères plus le terminateur nul.
Le terminateur nul est la barre oblique inverse zéro.
Vous n'êtes pas obligé de le mettre là-dedans car il est automatiquement ajouté par le compilateur.
C'est ainsi que nous pouvons initialiser et créer une chaîne dans un tableau de caractères.
Ensuite, pour l'imprimer, tout ce que nous avons à faire est de dire printf et de dire que la longueur est.
Et puis nous mettons le pourcentage s
comme spécificateur de format pour afficher une chaîne.
Et puis tout ce que nous faisons est de dire le nom de la chaîne.
Et pour ne pas être confus, disons simplement ma chaîne.
Et nous n'avons pas à utiliser l'esperluette comme nous l'avons fait précédemment, les exemples précédents,
nous pouvons simplement dire ma chaîne. Si nous compilons et exécutons ceci,
nous devrons peut-être également nous assurer que nous incluons l'en-tête de chaîne.
Lorsque nous compilons et exécutons ceci, vous allez voir la longueur de la chaîne.
Donc, la longueur est et je n'ai pas appelé la fonction de longueur de chaîne.
Donc, vous devez réellement appeler la fonction si vous voulez afficher la longueur, donc vous
faites quelque chose comme ça. Vous mettez la chaîne dans la longueur de la chaîne.
Maintenant, lorsque vous l'exécutez, vous voyez en fait la longueur de la chaîne.
Cela ne doit pas être une chaîne, mais un réel.
C'est ainsi que j'afficherais la chaîne. Si je veux afficher la longueur de la
chaîne, je fais un pourcentage d dans l'appel de la fonction.
Maintenant, quand je l'exécute,
vous remarquerez qu'il imprime en fait 16, qui est la longueur.
C'est donc une fonction assez simple d'utiliser la longueur de la chaîne. Si vous souhaitez copier
des chaînes, vous utilisez str compare.
Et vous souhaitez utiliser strn compare pour spécifier réellement les octets.
Donc, si nous avons mon nom est Jason,
et ensuite nous créons une autre chaîne,
en fait, nous la garderons simplement. Nous n'aurons même pas
à spécifier et ce que nous allons
faire, c'est que nous allons dire créer une autre
chaîne appelée temp et qui sera égale à
str et comparer, nous allons passer ce que nous voulons copier.
Créez simplement un tableau de caractères vide, et nous allons simplement
en faire une taille 50.
Et ce que nous allons faire ici, c'est que nous allons dire copie strn.
Le premier paramètre est l'endroit où nous voulons copier faire, nous allons dire temp.
Le deuxième paramètre est ce que nous voulons copier, c'est-à-dire ma chaîne.
Et puis nous ne voulons pas passer plus de 50 octets.
Nous pouvons donc dire la taille de la température pour dire que
nous ne voulons pas passer plus de 50 octets. Et vous voudrez probablement faire -1 pour
le terminateur nul.
De cette façon, ce troisième paramètre est vraiment important car nous n'allons jamais avoir de débordements de tampon.
Vous devez toujours utiliser strn copy et non str copy.
Et puis ici, nous pouvons simplement afficher notre chaîne pour voir si elle a été copiée.
Nous pourrions dire temp, le changer en pourcentage s.
Et quand nous construisons ceci, nous
devrions voir, pas la longueur, nous devrions voir que la chaîne est quelque chose
comme ça et la terminer par un point-virgule.
Maintenant, nous devons compiler ce que nous faisons.
Alors maintenant, nous l'exécutons. Nous devrions simplement voir notre chaîne qui a été copiée.
Donc, nous voyons que mon nom est Jason et qui est stocké
à l'intérieur de temp parce que nous avons imprimé temp.
Mais utilisez toujours la copie strn. N'utilisez pas str copy, cela
garantira que vous n'avez pas de dépassements de tampon.
Et le troisième paramètre doit toujours
être la destination, pas la
source, la destination. Il serait inutile de dire copier cette chaîne entière.
Parce que si c'est plus petit, vous allez avoir des problèmes. Alors dites toujours la taille de cela.
Et vous voyez que vous pouvez utiliser
l'opérateur sizeof pour voir combien d'octets sont à l'intérieur du caractère.
Parlons de quelques autres fonctions.
Nous savons donc comment obtenir la longueur, nous savons comment copier des chaînes, que diriez-vous de concaténer des chaînes.
La fonction str cap prend deux arguments, deux chaînes comme
arguments et copie la deuxième chaîne à la fin de la première.
La deuxième chaîne n'est pas
modifiée, seulement la première. Il retournera la valeur de son premier argument.
L'adresse du premier caractère de la chaîne à laquelle la deuxième chaîne est ajoutée.
Alors retournez quelque chose, en vous indiquant où vous l'avez réellement ajouté si jamais vous en aviez besoin.
Voici donc un exemple, nous créons une chaîne de caractères de ma
chaîne et elle contient juste ma chaîne avec un terminateur nul.
Nous créons une chaîne de caractères d'entrée, qui est de 80, elle est vide.
Nous disons entrer une chaîne à concaténer. Nous l'avons lu.
Et puis nous le concaténons.
Nous imprimons la chaîne d'origine suivie de la chaîne concaténée puis de l'entrée.
Donc, après cela, tout ce que vous avez entré serait mis
à la fin de ma chaîne. Donc, si vous entrez Jason, ce serait ma chaîne d'espace Jason.
C'est ce à quoi ma chaîne serait égale.
Parce que tu fais un gros chat dessus.
Nous imprimons d'abord la chaîne, puis nous appelons str cat dessus.
L'entrée sera en fait égale à ce qui a été entré, ma
chaîne suivie de ce qui a été entré.
Nous allons parcourir cet exemple dans une seconde. Maintenant, tout comme str
copy, str cat a aussi un strn end cat.
Ainsi, la version combinée devient la nouvelle première chaîne.
Donc, tout comme la concaténation de chaînes avec le chat str, il y
a un chat strn.
Str cat a le même problème avec la copie de str. Il peut y avoir un débordement de tampon. Il ne garantit pas
réellement que la deuxième chaîne rentrera dans le premier tableau.
Donc, si vous ne disposez pas de suffisamment d'espace dans ce premier tableau, vous pouvez rencontrer des problèmes de dépassement de la mémoire tampon.
Alors ce que vous voulez utiliser un chat strn.
Le deuxième argument indique le nombre maximum de caractères à ajouter.
Ainsi, par exemple, si vous faites un strn
cat et deux chaînes bogues un add-on, il ne va ajouter que les 13 premiers caractères de l'add-on aux bogues, cela dépend
de ce qui vient en premier. Si le module complémentaire est inférieur
à 13, il s'ajoutera uniquement jusqu'à ce que vous voyiez le terminateur nul.
Donc, dans cet exemple, nous créons deux chaînes.
Il s'agit de la source de cette destination. Nous faisons un chat strn.
Nous ne copions que 15 caractères dans la
destination à la fin. Donc, quelle que soit la taille de la destination
sera la taille de la destination plus 15 et ensuite nous l'imprimerons.
Alors regardons à nouveau cela dans les blocs de code.
Voici donc notre exemple et nous allons créer un tableau de
deux chaînes de caractères, une taille 50, l'autre taille 50.
Nous allons faire deux copies str pour les définir sur des données.
C'est la destination de la source. Et puis à la ligne 12, nous faisons le strn cat.
Et la destination sera ce à quoi nous nous concaténons.
La source sera donc ce que nous allons concaténer.
Et nous n'allons attribuer que 15 caractères.
Donc, si la source était supérieure à 15, nous
ne les copierions pas toutes.
Donc, quand nous construisons ceci et
l'exécutons, vous allez juste voir qu'il dit maintenant
que c'est le fichier source ou que cela va dire que c'est
la destination suivie de ceci est la source.
Donc, il dit que c'est la destination, c'est la source.
Il a concaténé cela à la fin de la destination.
Donc, vous voulez toujours utiliser strn cat pour la concaténation, afin de ne pas avoir de débordements de tampon.
Parlons de str compare, que je dis accidentellement au lieu
de str copy, str compare.
Donc, pour comparer des chaînes, nous devons également utiliser une fonction.
Si vous souhaitez comparer une chaîne à une autre, vous
ne pouvez pas utiliser le double égal, qui vérifie uniquement les références, que
vous ayez ou non la même adresse. Donc, ce que vous devez utiliser est str compare.
Cela va comparer le contenu de la chaîne.
Il ne compare pas le tableau. Il peut donc être utilisé pour
comparer des chaînes stockées dans des tableaux de différentes tailles.
Il ne compare pas les caractères.
Vous pouvez utiliser des arguments tels que des pommes et un entre guillemets doubles, mais
vous ne pouvez pas utiliser d'arguments de caractères tels qu'un seul caractère a.
Cette fonction fait pour les chaînes ce que les opérateurs relationnels font pour les nombres.
Ainsi, la fonction de comparaison va retourner
une valeur qui vous indique si la chaîne est égale ou non, si elle est
plus grande ou si elle est inférieure à.
S'il est égal, il retournera zéro.
S'il est inférieur à, il retournera moins de zéro, si str one
est inférieur à str deux.
Et si str deux est inférieur à str un, il retournera supérieur à zéro.
Et alors qu'est-ce que cela signifie exactement? Eh bien, laissez-moi vous donner un
exemple de la façon dont cela fonctionne.
Mettons ceci dans les blocs de code et exécutons-le.
Mais ici, nous faisons un tas de comparaisons str, et nous allons vous dire quelles sont les valeurs, si elles sont inférieures
ou supérieures à parce que ce n'est pas très clair.
Alors prenons ceci et regardons-le dans des blocs de code.
Voici donc notre exemple. Et nous comparons un tas de chaînes, puis nous
affichons simplement les résultats de
str compare, qu'il s'agisse de zéro ou autre.
Donc, si vous comparez deux chaînes a et a, elles doivent être entre guillemets.
Et ce que vous voyez ici, ce que nous faisons, c'est imprimer ce que nous appelons.
Nous délimitons
donc les guillemets. Nous mettons la barre oblique inverse afin que nous imprimions réellement un caractère
de guillemet et qu'il ne termine pas la chaîne. Mais si nous comparons a et
a, cela devrait renvoyer zéro. Parce que zéro signifie que les chaînes sont égales.
Si nous comparons a et b, str compare devrait renvoyer moins
de.
Parce que a est inférieur à b.
B a doit renvoyer un supérieur à zéro.
Mais passons en revue ceci, assurez-vous que je ne fais aucune erreur
et nous le verrons réellement dans la sortie.
Ainsi, lorsque nous exécutons ceci,
cela vous aide à vous rappeler quels numéros vont être renvoyés.
Ainsi, lorsque vous comparez a et a, vous obtenez en fait 0.
Si vous comparez a et b, b est inférieur
à a, donc c'est un négatif, quelque chose de moins
de zéro, j'aurais pu dire le contraire, voir
même si je les confond encore. Parce que a est supérieur à b, a
est supérieur à b, moins un.
B est inférieur à a, donc vous obtenez quelque chose de supérieur à zéro qui est un un.
C est supérieur à a, donc vous en obtenez un, juste quand
b était supérieur à a.
Et puis vous comparez les majuscules et les minuscules.
Lorsque vous comparez les majuscules et les minuscules, cela fait l'inverse. Z est en fait
inférieur à a minuscule.
Ainsi, le capital est toujours moins que minuscule.
Si vous essayez de comparer des pommes et des pommes, ce sera 1 parce que la
pomme est inférieure à la pomme.
Et c'est ainsi que fonctionnent les comparaisons. Il est important de comprendre le 0 supérieur à
1 ou inférieur à 1. Encore une fois, moins
de zéro va dire que la première chaîne est inférieure à la
deuxième chaîne.
Et supérieur à zéro va dire que la première chaîne est supérieure à la deuxième chaîne.
Cette fonction est très simple à utiliser. Vous n'avez pas à vous soucier
de tout type de comparaison de strn car peu importe la taille des tableaux
que vous comparez.
La fonction de comparaison str compare les chaînes jusqu'à ce qu'elle trouve les caractères correspondants qui diffèrent.
Cela pourrait donc être jusqu'à la fin de l'une des chaînes.
La fonction de comparaison Strn compare les chaînes jusqu'à ce qu'elles diffèrent ou jusqu'à ce
qu'elle ait comparé un nombre de caractères spécifié par le troisième argument.
Donc, dans ce cas, vous n'avez pas besoin d'utiliser strn compare
pour les dépassements de tampon. Il existe, mais vous ne l'utiliserez
que si vous ne souhaitez comparer qu'un certain nombre de caractères.
Il est utilisé différemment de
la copie str ou de la copie strn ou du chat strn.
La comparaison de strn indique simplement que je ne veux afficher qu'un nombre limité de caractères.
Cela serait donc utile si vous ne recherchez qu'un préfixe.
Donc, si vous souhaitez rechercher des chaînes commençant par astro,
vous pouvez limiter la recherche aux cinq premiers caractères
et utiliser strn compare de cette façon.
Donc, dans cet exemple, vous voyez que nous disons égal à zéro.
Vous voyez souvent une instruction if comme celle-ci lorsque vous utilisez str compare.
Vous voyez str compare à l'intérieur de cette instruction et est égal à zéro pour dire qu'il est égal.
Donc, strn compare utilise les cinq premiers caractères,
compare astro aux cinq premiers caractères de l'astronomie.
Ça va dire qu'il l'a trouvé. Ça va être égal à zéro, et ça va dire trouvé l'astronomie.
Si vous faites la même chose, mais que vous la comparez à une chaîne différente
appelée étonnant, cela ne la trouvera pas, elle s'affichera en fait - cela
dira que l'étonnant est plus grand que l'astro. Il va donc afficher quelque chose de
supérieur à 0, qui est un 1 et
il n'affichera aucune donnée.
Utilisez donc str compare lorsque vous comparez des chaînes pour tout le contenu.
Utilisez strn compare lorsque vous souhaitez uniquement comparer le préfixe à une chaîne.
Le même type de syntaxe ou de chaîne ne compare que ce troisième argument.
Nous avons donc beaucoup parlé de
certaines fonctions vraiment importantes que nous allons utiliser,
principalement str length, strn copy, strn cat et strn compare.
Nous allons avoir un défi où vous devrez utiliser ces fonctions qui vous permettront de vous
familiariser avec cela.
Mais vous allez vraiment vous familiariser avec cela parce que vous allez
finir par les utiliser encore et encore et encore. Merci.