Matlab中的字符串和字符有什么区别?

时间:2017-02-08 17:26:09

标签: string matlab char

MATLAB中字符串和字符类有什么区别?

a = 'AX'; % This is a character.
b = string(a) % This is a string.

4 个答案:

答案 0 :(得分:6)

documentation suggests

  

有两种方法可以在MATLAB®中表示文本。您可以将文本存储在字符数组中。典型的用途是将短文本存储为字符向量。从Release 2016b开始,您还可以在字符串数组中存储多个文本。字符串数组提供了一组用于将文本作为数据处理的函数。

这两种表示方式有所不同:

  • 元素访问。要表示不同长度的char个向量,必须使用cell个数组,例如ch = {'a', 'ab', 'abc'}。使用字符串,可以在实际数组中创建它们:str = [string('a'), string('ab'), string('abc')]。 但是,对于字符串数组中的index characters,必须使用大括号表示法:

    str{3}(2) % == 'b'
    
  • 内存使用。字符使用与字符一样多的字节。 string有开销:

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

    返回

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

答案 1 :(得分:3)

开始理解差异的最佳位置是the documentation。关键区别如前所述:

  
      
  • 字符数组是一系列字符,就像数字数组是一系列数字一样。典型的用途是将短文本作为字符向量存储,例如c = 'Hello World';
  •   
  • 字符串数组是文本片段的容器。字符串数组提供了一组用于处理文本作为数据的函数。要将文本转换为字符串数组,请使用string函数。
  •   

以下是关于他们之间差异的一些关键点:

  • 它们是不同的类别(即类型):charstring。因此,他们将为每个方法定义不同的方法集。考虑一下您希望对文本进行哪种操作,然后选择最适合这些操作的操作。
  • 由于string是容器类,请注意其大小与等效字符数组表示的不同之处。使用您的示例:

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

    请注意,string容器将其大小列为1x1(并在内存中占用更多字节),而字符数组(顾名思义)是1x2个字符数组

  • 它们不能总是互换使用,您可能需要在两者之间进行转换以进行某些操作。例如,string个对象不能用作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
    

答案 2 :(得分:3)

字符串确实有一些开销,但每个字符仍然增加2个字节。每8个字符后,它会增加变量的大小。红线是y=2x+127

string class

图是使用:

创建的
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

答案 3 :(得分:3)

需要注意的重要一件事是,与方括号进行交互时,字符串和字符的行为有所不同。来自python时,这尤其令人困惑。考虑以下示例:

>>['asdf' '123']

ans =

    'asdf123'

>> ["asdf" "123"]

ans = 

  1×2 string array

    "asdf"    "123"