Jaka jest różnica między ciągiem znaków a klasą znaków w MATLAB?Jaka jest różnica między napisami i znakami w Matlabie?
a = 'AX'; % This is a character.
b = string(a) % This is a string.
Jaka jest różnica między ciągiem znaków a klasą znaków w MATLAB?Jaka jest różnica między napisami i znakami w Matlabie?
a = 'AX'; % This is a character.
b = string(a) % This is a string.
Istnieją dwa sposoby, aby reprezentować tekst MatLab®. Możesz przechowywać tekst w tablicach znaków. Typowym zastosowaniem jest przechowywanie krótkich fragmentów tekstu jako wektorów znaków. I począwszy od wersji 2016b, możesz również przechowywać wiele fragmentów tekstu w tablicach ciągów. Tablice ciągów udostępniają zestaw funkcji do pracy z tekstem jako danymi.
ten sposób obie reprezentacje różnią:
Element dostęp. Aby reprezentować wektory o różnych długościach, trzeba było używać tablic cell
, np. ch = {'a', 'ab', 'abc'}
. W przypadku łańcuchów można je utworzyć w rzeczywistych tablicach: str = [string('a'), string('ab'), string('abc')]
. Jednak, aby index characters w tablicy ciągów bezpośrednio Kędzierzawy notacja wspornik musi być stosowany: użyj
str{3}(2) % == 'b'
pamięci. Chary używają dokładnie tyle bajtów, ile znaków. string
s mają narzut:
a = 'abc'
b = string('abc')
whos a b
powraca
Name Size Bytes Class Attributes a 1x3 6 char b 1x1 132 string
Najlepszym miejscem do rozpoczęcia dla zrozumienia różnicy jest the documentation. Kluczową różnicą, jak stwierdził tam:
- tablicę znaków jest ciągiem znaków, tak jak tablica numeryczna jest ciągiem liczb. Typowym zastosowaniem jest przechowywanie krótkich fragmentów tekstu jako wektorów znaków, takich jak
c = 'Hello World';
.- Tablica znaków jest kontenerem na fragmenty tekstu. Tablice ciągów udostępniają zestaw funkcji do pracy z tekstem jako danymi. Aby przekonwertować tekst na tablice ciągów, użyj funkcji
string
.
Oto jeszcze kilka kluczowych punktów o ich różnicami:
char
kontra string
. Jako takie będą miały różne zestawy metod zdefiniowanych dla każdego. Zastanów się, jakie operacje chcesz wykonać na swoim tekście, a następnie wybierz ten, który najlepiej je obsługuje.Ponieważ string
jest klasą kontenera, należy pamiętać, że jego rozmiar różni się od równoważnej reprezentacji tablic znaków.Korzystanie przykład:
>> 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
Zauważ, że pojemnik string
wymienia jego wielkości jako 1x1
(i zajmuje więcej bajtów w pamięci), podczas gdy tablica znaków jest, jak sama nazwa wskazuje, jest 1x2
tablicę znaków.
Nie zawsze można ich używać zamiennie, a w przypadku niektórych operacji może zajść potrzeba ich konwersji. Na przykład, string
obiekty nie mogą być stosowane jako dynamic field names for structure indexing:
>> 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
Struny mają trochę nad głową, ale jeszcze wzrosnąć o 2 bajty na znak. Po każdych 8 znakach zwiększa rozmiar zmiennej. Czerwona linia to y=2x+127
.
postać jest utworzona z:
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