Quelle est la différence entre string et character class dans MATLAB?
a = 'AX'; % This is a character.
b = string(a) % This is a string.
Il existe deux façons de représenter du texte dans MATLAB®. Vous pouvez stocker du texte dans des tableaux de caractères. Une utilisation typique consiste à stocker de courts morceaux de texte en tant que vecteurs de caractères. Et à partir de la version 2016b, vous pouvez également stocker plusieurs morceaux de texte dans des tableaux de chaînes. Les tableaux de chaînes fournissent un ensemble de fonctions permettant de travailler avec du texte en tant que données.
Voici comment les deux représentations diffèrent:
Accès aux éléments . Pour représenter des vecteurs char
de longueur différente, il fallait utiliser des tableaux cell
, par ex. ch = {'a', 'ab', 'abc'}
. Avec les chaînes, elles peuvent être créées dans des tableaux réels: str = [string('a'), string('ab'), string('abc')]
. Cependant, pour index des caractères dans un tableau de chaînes directement, la notation des accolades doit être utilisée:
str{3}(2) % == 'b'
Utilisation de la mémoire . Les caractères utilisent exactement autant d'octets qu'il y a de caractères. string
s ont des frais généraux:
a = 'abc'
b = string('abc')
whos a b
résultats
Name Size Bytes Class Attributes a 1x3 6 char b 1x1 132 string
Le meilleur endroit pour commencer à comprendre la différence est la documentation . La principale différence, comme indiqué ici:
- Un tableau de caractères est une séquence de caractères, tout comme un tableau numérique est une séquence de nombres. Une utilisation typique consiste à stocker de courts morceaux de texte sous forme de vecteurs de caractères, tels que
c = 'Hello World';
.- Un tableau de chaînes est un conteneur pour des morceaux de texte. Les tableaux de chaînes fournissent un ensemble de fonctions permettant de travailler avec du texte en tant que données. Pour convertir du texte en tableaux de chaînes, utilisez la fonction
string
.
Voici quelques points clés sur leurs différences:
char
versus string
. En tant que tels, ils auront différents ensembles de méthodes définis pour chacun. Pensez au type d'opérations que vous souhaitez effectuer sur votre texte, puis choisissez celle qui le supporte le mieux.Comme string
est une classe de conteneur, n'oubliez pas que sa taille diffère d'une représentation de tableau de caractères équivalente. En utilisant votre exemple:
>> a = 'AX'; % This is a character.
>> b = string(a) % This is a string.
>> whos
Name Size Bytes Class Attributes
a 1x2 4 char
b 1x1 134 string
Notez que le conteneur string
indique sa taille en tant que 1x1
(et occupe plus d'octets en mémoire), tandis que le tableau de caractères est, comme son nom l'indique, un tableau de caractères 1x2
.
Ils ne peuvent pas toujours être utilisés de manière interchangeable et vous devrez peut-être effectuer une conversion entre les deux pour certaines opérations. Par exemple, les objets string
ne peuvent pas être utilisés en tant que noms de champs dynamiques pour l'indexation de structure :
>> s = struct('a', 1);
>> name = string('a');
>> s.(name)
Argument to dynamic structure reference must evaluate to a valid field name.
>> s.(char(name))
ans =
1
Les chaînes ont un peu de surcharge, mais augmentent quand même de 2 octets par caractère. Tous les 8 caractères, la taille de la variable augmente. La ligne rouge est y=2x+127
.
la figure est créée en utilisant:
v=[];N=100;
for ct = 1:N
s=char(randi([0 255],[1,ct]));
s=string(s);
a=whos('s');v(ct)=a.bytes;
end
figure(1);clf
plot(v)
xlabel('# characters')
ylabel('# bytes')
p=polyfit(1:N,v,1);
hold on
plot([0,N],[127,2*N+127],'r')
hold off