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

use*_*243 9 string matlab char

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

a = 'AX'; % This is a character.
b = string(a) % This is a string.
Run Code Online (Sandbox Code Playgroud)

zee*_*eez 7

文档建议:

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

这就是两种表示方式的不同之处:


v.t*_*ala 6

需要注意的一件重要的实际事情是,字符串和字符在与方括号交互时的行为不同。当来自 python 时,这可能会特别令人困惑。考虑以下示例:

\n\n
>>[\'asdf\' \'123\']\n\nans =\n\n    \'asdf123\'\n\n>> ["asdf" "123"]\n\nans = \n\n  1\xc3\x972 string array\n\n    "asdf"    "123"\n
Run Code Online (Sandbox Code Playgroud)\n


gno*_*ice 5

了解差异的最佳起点是文档。关键区别,如那里所述:

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

以下是有关它们差异的一些关键点:

  • 它们是不同的类(即类型):charstring. 因此,它们将为每个方法定义不同的方法集。考虑您想对文本进行何种操作,然后选择最能支持这些操作的操作。
  • 由于 astring是一个容器类,请注意其大小与等效字符数组表示形式的不同之处。使用您的示例:

    >> 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
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 它们不能总是互换使用,您可能需要在两者之间进行转换以进行某些操作。例如,string对象不能用作结构索引的动态字段名称

    >> 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
    
    Run Code Online (Sandbox Code Playgroud)


Gel*_*ant 5

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

字符串类

该图是使用以下命令创建的:

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
Run Code Online (Sandbox Code Playgroud)