2017-02-08 55 views

Odpowiedz

6

documentation suggests:

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 
    
3

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:

  • Są różne klasy (czyli typy): 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 
    
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.

string class

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