web-dev-qa-db-fra.com

Quelle est la différence entre un tableau de caractères et une chaîne?

En passant mon temps sur des langages de haut niveau, je me suis soudain rendu compte que je ne connaissais pas la différence entre un tableau de caractères et une chaîne. Je pense qu'ils sont la même chose mais pas sûr. Y a-t-il une différence? Est-ce juste un tableau de caractères avec une certaine abstraction?

16
Todd Moses

un tableau de caractères est simplement un tableau de caractères

une chaîne est une structure de données qui utilise un tableau de caractères

certaines représentations de chaînes utilisent un terminateur nul (comme C), d'autres utilisent un préfixe de longueur

11
Steven A. Lowe

Une chaîne est une abstraction, mais une séquence de caractères. Cela ne dit rien de la mise en œuvre. Si vous souhaitez créer une implémentation String basée sur une liste de caractères liée, rien ne vous en empêche.

Dans un langage tel que C, il y a très peu de différence - une chaîne c est une suite de caractères terminée par un caractère nul à des adresses séquentielles, généralement accessible via un pointeur.

Dans un langage OOP, une chaîne sera un objet d'une classe de chaîne. Cela contiendra probablement les données d'un tableau de caractères en interne, mais vous n'avez pas besoin de le savoir. Un tableau de caractères ne peut être qu'un simple tableau, mais une classe String peut fournir de nombreuses opérations (sous-chaînes, regex, etc.) sur les chaînes si l'implémenteur le décide.

18
Draemon

J'avais l'habitude d'enseigner la programmation, et c'est comme ça que j'expliquais ce problème particulier.

Tout d'abord, concentrez-vous sur ce que les deux éléments ont en commun : un tableau de caractères et une chaîne sont constitués d'une séquence de caractères. Être une séquence implique que les caractères soient ordonnés et qu'ils puissent être énumérés, par exemple.

Concentrez-vous maintenant sur ce que chacune des deux choses ajoutent, de manière différente , à ce terrain d'entente.

Un tableau de caractères ajoute ce que tout tableau est connu pour ajouter: indexation et accès aléatoire à des éléments individuels.

Un chaîne, d'autre part, ajoute le fait que la séquence de caractères est considérée comme un tout avec ses propres propriétés. Dans certaines mises en œuvre, cela signifie modifier la façon dont les caractères sont stockés (par exemple, ajouter un caractère final nul dans les chaînes de caractères C).

Cette approche (examiner les points communs, puis la manière dont les choses s'en échappent) s’est révélée utile dans diverses situations.

J'espère que cela t'aides.

7
CesarGon

En C, ils sont presque identiques, bien qu'une chaîne ait un caractère nul supplémentaire à la fin.

Dans d'autres langages (Java, C #, etc.), une chaîne est un objet, alors qu'un tableau de caractères est un tableau de ... caractères (qui sont des types de données primitifs). 

Normalement, les chaînes sont implémentées avec des tableaux de caractères.

4
Oded

La réponse dépend dans une certaine mesure de la langue dans laquelle vous parlez. Dans le monde .Net/C #, les chaînes sont des objets immuables, alors qu'un tableau de caractères permet d'ajouter/de modifier facilement des valeurs dans le tableau. Les chaînes peuvent être traitées comme des tableaux de caractères en lecture seule, car vous pouvez effectuer une itération sur les caractères d'une chaîne.

En résumé, je pense que la plus grande différence réside dans la manière dont vous voulez travailler avec eux. Souhaitez-vous travailler avec un bloc de texte, par exemple pour montrer un message à un utilisateur final, ou regardez-vous une séquence de caractères en train de traiter la liste? Tout cela est plutôt subjectif à un certain niveau.

2
ckramer

Une chaîne de style C est représentée en interne par un tableau de caractères avec le caractère '\ 0' à la fin, qui indique la fin de la chaîne.

En C++, une classe de conteneur de chaîne définie dans string.h fournit des opérations de chaîne typiques permettant de manipuler la chaîne. 

0
cpx

Cela dépend de la langue. Dans les langages C-ish, ils sont à peu près synonymes. Vous pourriez prétendre que la différence est que les "chaînes" ont une fin implicite, mais que ce serait couper les cheveux en quatre.

Fortran est l'autre extrême. Les tableaux de caractères et les chaînes de caractères sont de types totalement différents, avec différentes opérations disponibles.

0
T.E.D.

Une chaîne de caractères est le tableau de caractères terminé par le caractère nul «\ 0».

0
harman

String est une class en Java. Donc, il a des attributs, par exemple. length. Ainsi, lorsque vous demandez la taille d'une chaîne, elle renvoie simplement celle-ci au lieu de calculer la valeur à chaque fois. Il a également d'autres méthodes, par exemple. indexOf, substring, etc. pour vous rendre la vie facile afin que vous n'ayez pas à le faire vous-même.

0
fastcodejava

En C, une chaîne de caractères est un tableau de caractères terminé par un caractère nul (\ 0) mais 

En C++, une chaîne est une classe et nous utilisons son objet. Il n'y a pas de caractère null à la fin, mais un tableau de caractères contient un caractère nul à la fin.

De même, nous pouvons utiliser des opérateurs avec l'objet string en C++.

0
Shivam Taneja