Bonjour et bienvenue à nouveau. Dans cette
conférence, je veux parler de la création d'une chaîne, en particulier de
la façon dont vous pouvez le faire en c en utilisant un tableau de caractères.
J'ai tendance à utiliser les termes chaîne et chaînes de caractères de manière interchangeable.
Mais en réalité, une chaîne de caractères est le tableau de caractères dont nous allons parler.
C'est un concept très important.
Nous allons maintenant pouvoir utiliser des mots et du texte dans notre programme pour faire toutes sortes de choses.
Maintenant, c lui-même n'a aucun type de données qui représente une chaîne.
Il n'y a rien là-bas. De nombreux langages prennent en
charge un objet ou un type de données de type chaîne.
Maintenant qu'il n'y a pas de type de données c dans la chaîne, vous
ne pouvez utiliser aucun des opérateurs de la chaîne.
Donc, ce que nous finirons par faire, c'est que nous allons finir par utiliser la bibliothèque standard et il y a
toutes sortes de fonctions de chaîne dont nous allons parler.
Nous avons trois conférences dédiées aux différentes fonctions de chaîne que vous pouvez utiliser.
Et cela nous aidera à manipuler les chaînes, à obtenir des informations sur les chaînes.
Mais vous ne pouvez pas utiliser d'opérateurs sur des chaînes, pas de chaînes
plus ou moins, rien de tout cela.
Les chaînes de c sont stockées dans un tableau de type char.
Nous savons ce qu'est un tableau. Nous savons ce qu'est un caractère de type.
Un type char est un seul caractère, un tableau que vous pouvez
simplement stocker plusieurs éléments sous le même nom.
Il est donc logique qu'une chaîne soit à l'intérieur d'un tableau de caractères
car une chaîne est composée de plusieurs caractères.
Ainsi, les caractères d'une chaîne sont stockés dans des cellules de mémoire adjacentes, un caractère par cellule.
Vous pouvez y accéder comme vous accédez également à un tableau.
Mais comment déclarer une chaîne et voir est que vous utiliseriez simplement le type char et
ensuite les crochets pour indiquer la taille, tout comme un tableau normal si
vous deviez le créer d'un type différent.
Char, puis quel que soit votre nom, puis la taille
du tableau de caractères entre crochets.
C'est ainsi que vous pouvez déclarer une chaîne en c.
Maintenant, lorsque vous déclarez la chaîne dans c comme ceci, il n'y
a pas de données réelles associées à. Vous spécifiez simplement la taille.
C'est le moyen le plus simple.
Ainsi, la variable peut accueillir une chaîne contenant jusqu'à 19 caractères.
Souvenez-vous de ce caractère nul.
Si vous dites que la taille de votre chaîne sera de 20, cela signifie que
seuls 19 caractères peuvent être stockés
car vous devez avoir ce caractère supplémentaire pour le null.
Gardez cela à l'esprit, déclarer un tableau de caractères est de 20 signifie
que 19 caractères peuvent y être stockés.
Lorsque vous spécifiez la dimension d'un tableau que vous prévoyez d'utiliser avant une chaîne - pour stocker
une chaîne, elle doit
être au moins supérieure d'un au nombre de caractères de la chaîne que vous souhaitez stocker.
Le compilateur ajoutera automatiquement le terminateur nul à la fin de chaque constante de chaîne.
Donc, ce que vous devez vraiment faire, c'est que lorsque vous
créez ces chaînes de caractères, vous devez les initialiser.
Vous pouvez donc initialiser une variable chaîne comme vous pouvez initialiser un tableau.
Vous mettez chaque caractère à l'intérieur de ces crochets.
Donc, cela ressemble beaucoup à si vous initialisiez des éléments dans un tableau d'entiers.
Mais si vous dites mot char, puis à
l'intérieur des crochets ondulés, vous insérez chaque caractère unique qui
créerait un tableau de caractères.
C'est donc la même chose que toute autre initialisation de tableau.
En l'absence de mise de la taille,
le compilateur c calcule automatiquement le nombre d'éléments dans le tableau, puis en ajoute un pour le terminateur nul.
C'est donc basé sur le nombre d'initialiseurs que vous avez entre les
crochets, les accolades.
Cette instruction va réserver de l'espace et de la mémoire pour
exactement sept caractères, point d'exclamation
h-e-l-l-o puis le terminateur nul, et ce petit diagramme à droite vous le montre.
Automatiquement et en ajoutant ce terminateur nul. Maintenant, ce serait vraiment
pénible si vous deviez toujours initialiser vos
tableaux de caractères avec des guillemets simples suivis de virgules.
Donc, ce que vous pouvez faire, c'est même la notation abrégée, c'est que vous pouvez simplement mettre des guillemets doubles autour de cela.
Ainsi, vous pouvez soit spécifier la chaîne explicitement, comme dans ce premier
exemple, et vous devrez alors utiliser une fonction de chaîne
juste pour lui appliquer des
données, soit laisser le compilateur le faire pour vous.
Le problème avec le faire explicitement est que vous devez toujours vous rappeler d'ajouter ce caractère supplémentaire
pour le null.
Donc, ce que vous devriez vraiment faire, c'est laisser le compilateur le comprendre pour vous.
Donc, ne mettez aucun nombre entre ces crochets pour la taille.
Parce que si la taille spécifiée est trop petite, le compilateur ne peut pas contenir le
caractère nul de fin à la fin du tableau et il n'en met pas un là et il ne
va pas vous dire qu'il n'en a pas mis un là.
Donc, vous allez avoir un bogue dans votre programme, vous ne le saurez même pas.
La meilleure pratique est lorsque vous utilisez un littéral de chaîne
et que vous initialisez une chaîne pour laisser simplement le compilateur déterminer la taille pour vous.
Faites-en une taille plus grande ou quelque chose du genre, puis mettez-le simplement là-dedans et il déterminera la taille pour vous.
Alors ne spécifiez pas la taille. Laissez le compilateur le comprendre.
De cette façon, vous pouvez être sûr que ce sera correct.
Laissez simplement ces crochets comme des crochets
vides et assignez-le avec l'opérateur d'affectation, puis entre guillemets,
vous pouvez simplement le mettre. Vous n'avez même pas besoin des crochets.
C'est la meilleure pratique. Nous allons passer par un exemple.
Vous pouvez également initialiser une partie seulement
d'un tableau d'éléments de type char avec une chaîne.
Donc, si vous avez réellement créé une taille qui était vraiment grande
et que vous n'avez attribué que quelques caractères, c'est
bien aussi, vous n'initialisez que certains des caractères. Tous les autres personnages vont
juste être vides.
Donc, ce qui se passera ici, c'est que le compilateur initialisera les cinq premiers éléments.
Str zéro à str quatre, tous ces caractères
de la constante de chaîne, puis la chaîne de sous 5
contiendront le caractère nul.
L'espace sera toujours alloué pour les 40 éléments
du tableau, mais seuls cinq d'entre eux seront utilisés, quatre plus le caractère nul.
Encore une fois, votre meilleure pratique ne spécifie pas réellement un nombre à l'intérieur de
la taille, affectez-lui simplement une chaîne littérale en utilisant des guillemets doubles.
C'est ce que vous allez finir par voir.
Maintenant, si vous n'avez pas initialisé et que vous venez de
créer le tableau de caractères avec une taille, comment y mettre la date.
Eh bien, parce que c'est un tableau, vous ne pouvez pas simplement attribuer des données.
Nous savons que si nous avions un tableau d'entiers, nous ne pouvons
pas simplement attribuer à un tableau d'entiers le nombre cinq,
cela n'a pas de sens. Vous devez spécifier les éléments réels.
Vous devez spécifier les indices.
Vous ne pouvez donc pas faire quelque chose comme déclarer un tableau de caractères avec 100 caractères puis
dire s est égal à bonjour. Cela ne fonctionnera pas.
Parce que, encore une fois, s est un tableau. Même s'il s'agit d'une chaîne entre guillemets doubles, c'est toujours un tableau en mémoire.
Donc, si vous effectuez une opération d'affectation, vous ne pouvez pas affecter
un tableau de caractères à un autre tableau de caractères comme ci-dessus.
Si vous souhaitez affecter des données
à un tableau de caractères après l'avoir déclaré et après l'avoir initialisé,
vous devez utiliser une fonction spéciale appelée str copy.
Et nous allons en parler dans une autre conférence.
Donc, jusqu'à ce point, lorsque vous créez vos chaînes, elles seront des chaînes
littérales, elles seront entre guillemets et vous ne les modifierez jamais.
Cela est donc parfaitement valable également. Vous pouvez en fait accéder simplement à
ces caractères ou à chaque élément du tableau par l'index et spécifier chaque caractère.
Donc s sub 0, s sub 1, puis mettez un seul caractère entre guillemets simples.
Vous pouvez l'attribuer de cette façon. Mais imaginez si vous aviez une chaîne de 100 octets.
Cela va prendre beaucoup de lignes de code. Donc tu ne veux pas faire ça.
Ce que vous allez vouloir faire est de l'initialiser lorsque
vous le déclarez sans taille, puis de spécifier
si vous souhaitez le modifier en copiant.
En ce qui concerne l'affichage d'une chaîne en sortie, nous allons toujours utiliser cette fonction printf.
Lorsque vous voulez faire référence à une chaîne n'importe où dans votre programme, vous utilisez
simplement le nom du tableau seul.
Vous n'avez pas à spécifier d'indices.
Parce que les indices à l'intérieur du tableau vont spécifier un seul caractère.
Si vous voulez la chaîne entière, utilisez simplement le nom du tableau.
Donc, si vous utilisez la fonction printf pour afficher
la sortie, procédez comme suit. À l'intérieur des guillemets doubles,
vous utiliseriez un pourcentage s comme spécificateur de format, puis simplement le nom du tableau de caractères.
Vous ne le traitez donc pas comme les autres tableaux lorsque vous souhaitez y accéder. Lorsque vous voulez y accéder juste le nom,
pas d'index ou de crochets réels.
Et le pourcentage comme spécificateur de format sert à la sortie d'une
chaîne terminée par une valeur nulle. N'oubliez pas qu'avant d'utiliser le pourcentage d pour
les entiers, vous pouvez utiliser le pourcentage c pour les caractères.
Pour les chaînes, vous utilisez des pourcentages et ce sont des tableaux de caractères.
Il attend une chaîne terminée par null.
Donc, cependant, vous initialisez la chaîne si vous l'avez fait sans taille et que le terminateur
nul est automatiquement ajouté ou si vous
l'avez créé avec une taille spécifique et que vous l'avez ajouté ou si vous
l'avez ajouté explicitement, cela n'a pas d'importance. Il doit juste être terminé par null.
La fonction printf suppose que l'on rencontre le spécificateur de format pour cent
s que l'argument correspondant est une chaîne de caractères qui se termine par un caractère nul.
C'est ce à quoi il s'attend, il doit donc en être ainsi.
Pour saisir une chaîne, nous savons comment saisir d'autres
ensembles de données via le clavier à l'aide de scanf.
Nous allons faire la même chose pour la saisie de chaînes.
Nous allons utiliser une fonction scanf. Avec la fonction scanf, ce
sera la même chose, sauf que vous allez utiliser un spécificateur de format différent.
Donc, pour les chaînes, vous allez utiliser un pourcentage s comme entrée.
Et c'est utilisé pour saisir une chaîne.
L'autre chose à noter ici est qu'il n'y a pas d'esperluette pour le nom de
la variable car c'est un caractère. N'oubliez pas que nous avons mentionné que vous
ne devez fournir que l'esperluette et l'adresse de l'opérateur sur les chaînes.
La raison en est que lorsque nous parlerons de pointeurs, ce sera plus clair.
Mais l'entrée char même s'il s'agit d'un tableau
de caractères c'est un pointeur, et scanf comme deuxième argument prend un pointeur.
Et c'est pourquoi vous n'êtes pas obligé de le faire. Lorsque vous déclarez des entiers et des doubles, ce ne sont
pas des pointeurs et. Donc, si
vous voulez lire l'entrée du clavier en utilisant scanf, le deuxième argument attend un pointeur que
vous devez passer dans une adresse.
Maintenant, avec le scanf lorsque vous
faites une chaîne, scanf ne lira que jusqu'à l'espace.
Donc, si vous faites scanf et que vous tapez
Jason, c'est un instructeur.
La seule chose qui sera stockée en entrée est Jason. Parce qu'une fois qu'il atteint cet
espace, il ne lira pas le reste de la chaîne.
Il existe donc d'autres fonctions que vous pouvez utiliser pour lire la chaîne entière.
Certains des exemples que nous allons utiliser le feront probablement. Vous pouvez faire des choses comme f
get s, qui est une autre façon de lire l'entrée du clavier et qui lira la
chaîne entière indépendamment des espaces.
Mais il y en a un autre que je
pense appelé get underscore s pour
C11, mais nous en reparlerons plus, mais ce n'est qu'une chose à
retenir lorsque vous lisez des entrées pour des chaînes. Il ne lira que jusqu'au bout.
Que diriez-vous de tester si deux chaînes sont égales.
Eh bien, jusqu'à ce point, nous avons testé toutes
les variables pour voir si elles sont égales, nous utilisons simplement égal à égal.
Mais avec des chaînes, cela ne fonctionnera pas.
L'opérateur d'égalité, rappelez-vous, nous avons dit que les chaînes sont des tableaux de caractères, vous ne pouvez donc pas y utiliser d'opérateurs.
Et l'opérateur d'égalité ne peut être appliqué qu'aux entiers et doubles
ou flottants ou caractères.
Cela ne fonctionne pas sur les structures ou les tableaux. Vous ne pouvez pas comparer deux tableaux.
Cela ne fonctionnera donc pas avec des chaînes. Si vous voulez déterminer si deux chaînes
sont égales, vous devez comparer explicitement les deux chaînes de caractères caractère par caractère.
Vous devez donc regarder chaque élément de l'index
du tableau par index.
Cependant, c'est vraiment, vraiment un gros problème parce que ce serait vraiment fastidieux.
Nous allons donc parler de la façon dont vous pouvez le faire
très facilement en utilisant une fonction de comparaison str de la bibliothèque standard, mais
vous ne pouvez pas utiliser les égaux égaux, rappelez-vous cela.
Et encore une fois, juste pour rappel, je l'ai dit plusieurs fois, je veux le
répéter, la constante de chaîne x entre guillemets
doubles n'est pas la même que la constante de caractère x entre guillemets simples.
X entre guillemets simples est un type de base, c'est juste char
ou care.
X entre guillemets doubles est un type de lecteur, c'est un tableau de type char.
X entre guillemets doubles se compose en réalité de deux caractères, le x
et le terminateur nul, le caractère nul, alors gardez cela à l'esprit.
Voici un exemple de
la façon dont nous pouvons créer des chaînes en
les déclarant avec une taille ou en les initialisant sur la même ligne.
C'est maintenant la meilleure pratique. Si vous allez utiliser des chaînes littérales, ce
que je ferais, c'est
que je ferais ce qu'il dit ici, créer le tableau de caractères, ne
pas spécifier de taille, puis à droite de l'opérateur d'affectation, des guillemets doubles.
Le compilateur créera automatiquement la bonne chaîne et y ajoutera un terminateur nul.
Si vous spécifiez une taille et que vous n'avez pas assez de caractères, il ne la stockera pas.
Créez donc simplement des chaînes de caractères littérales en
utilisant le type de données char, le
nom de la variable, puis des crochets vides.
Ce programme va, je pense, compter les caractères dans un
tableau, donc il va essentiellement obtenir la longueur de la chaîne.
Ce que nous faisons ici, c'est que nous créons une variable nommée count dans deux tableaux
de caractères avec deux chaînes différentes, être ou ne pas être,
puis une virgule c'est la question.
Char str one va avoir un alternateur après b, et
str va avoir une alternative après question.
Nous avons donc une boucle ici qui va passer par
le premier tableau, de count égal à zéro jusqu'à ce que nous voyions un terminateur nul.
Et nous pouvons utiliser le non égal dans ce cas parce que nous comparons un caractère.
Null terminator en tant que caractère. C'est parfaitement bien de comparer des personnages.
Donc, notre boucle while va aller jusqu'au bout jusqu'à ce que nous voyions un terminateur nul.
Une fois que nous voyons un terminateur nul, nous allons sauter.
Count va être égal au nombre de caractères de cette chaîne.
C'est donc la longueur de cette chaîne.
Nous le faisons pour les deux chaînes. Et vous remarquerez qu'en gros, les deux
chaînes auront la bonne longueur parce que nous ne faisons que passer par chacune d'elles.
B ou ne pas b va être quelque chose
comme 18 caractères.
Maintenant, vous n'aurez jamais vraiment besoin de faire quelque chose comme ça
parce que nous avons une belle fonction d'aide avec str length pour trouver des longueurs de chaînes.
Mais encore une fois, ce que cela démontre, c'est le fait qu'il s'agit d'un tableau.
Et si vous voulez comparer ou trouver la longueur d'une chaîne, vous pouvez
utiliser le not equals et regarder le caractère, le terminateur nul.
J'espère que cela a été utile. C'est ainsi que nous allons définir et initialiser les littéraux de chaîne.
Merci.