2017-02-08 2 views

Antwort

6

Die documentation suggests:

Es gibt zwei Möglichkeiten, um Text in MATLAB ® darzustellen. Sie können Text in Zeichenfeldern speichern. Eine typische Verwendung besteht darin, kurze Textstücke als Zeichenvektoren zu speichern. Ab Release 2016b können Sie auch mehrere Textabschnitte in String-Arrays speichern. String-Arrays bieten eine Reihe von Funktionen zum Arbeiten mit Text als Daten.

Dies ist, wie die beiden Darstellungen unterscheiden:

  • Element Zugriff. Um char Vektoren unterschiedlicher Länge darzustellen, musste man cell Arrays verwenden, z. ch = {'a', 'ab', 'abc'}. Mit Zeichenfolgen können sie in tatsächlichen Arrays erstellt werden: str = [string('a'), string('ab'), string('abc')]. jedoch zu index characters in einem String-Array direkt die geschweifte Klammer Notation verwendet werden:

    str{3}(2) % == 'b' 
    
  • Speicher verwenden. Zeichen verwenden genau so viele Bytes wie Zeichen vorhanden sind. string s haben Kopf:

    a = 'abc' 
    b = string('abc') 
    whos a b 
    

    kehrt

    Name  Size   Bytes Class  Attributes 
    
    a   1x3     6 char     
    b   1x1    132 string 
    
3

Der beste Ort für das Verständnis der Unterschied zu starten ist the documentation. Der Hauptunterschied, wie es angegeben:

  • ein Zeichenarray ist eine Folge von Zeichen, so wie ein numerisches Array eine Sequenz von Zahlen ist. Eine typische Verwendung besteht darin, kurze Textstücke als Zeichenvektoren zu speichern, beispielsweise c = 'Hello World';.
  • Ein String-Array ist ein Container für Textstücke. String-Arrays bieten eine Reihe von Funktionen zum Arbeiten mit Text als Daten. Verwenden Sie die Funktion string, um Text in Zeichenfolgenarrays zu konvertieren.

Hier sind ein paar wichtige Punkte über ihre Unterschiede:

  • Sie sind verschiedene Klassen (das heißt Typen): char gegen string. Als solche werden sie unterschiedliche Gruppen von Methoden für jede definiert haben. Denken Sie darüber nach, welche Art von Operationen Sie für Ihren Text ausführen möchten, und wählen Sie dann diejenige aus, die diese am besten unterstützt.
  • Da eine string eine Containerklasse ist, beachten Sie, wie sich ihre Größe von einer äquivalenten Character-Array-Darstellung unterscheidet.Mit Ihrem Beispiel:

    >> 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 
    

    Beachten Sie, dass die string Container seine Größe als 1x1 Listen (und nehmen mehr Bytes im Speicher oben), während das Zeichenfeld ist, wie der Name schon sagt, einen 1x2 Array von Zeichen.

  • Sie können nicht immer synonym verwendet werden, und Sie müssen möglicherweise für bestimmte Operationen zwischen den beiden konvertieren.

    >> 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

Strings tun haben ein wenig Overhead, aber immer noch um 2 Bytes pro Zeichen erhöhen: Zum Beispiel können string Objekte nicht als dynamic field names for structure indexing verwendet werden. Nach jeweils 8 Zeichen wird die Größe der Variablen erhöht. Die rote Linie ist y=2x+127.

string class

Figur wird mit erstellt:

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 
Verwandte Themen