MATLAB字符串
MATLAB真正强有力的地方在于它的数值处理能力。然而,经常希望操作文本,例如把标号和标题放在图上。在MATLAB里,文本当作特征字符串或简单地当作字符串。
6.1  字符串
    MATLAB中的字符串一般是ASCII值的数值数组,它作为字符串表达式进行显示。例如,
    » t=' How about this character string? '
    t = How about this character string?
    » size(t)
    ans =  1    32
    » whos
            Name        Size      Elements    Bytes    Density  Complex
              ans      1 by 2            2        16      Full      No
                t      1 by 32          32      256      Full      No
    一个字符串是由单引号括起来的简单文本。在字符串里的每个字符是数组里的一个元素,字符串的存储要求每个字符8个字节,如同MATLAB的其它变量。因为ASCII字符只要求一个字节,故这种存储要求是浪费的,7/8所分配的存储空间无用。然而,对字符串保持同样的数据结构简化MATLAB的内部数据结构。所给出的字符串操作并不是MATLAB的基本特点,但这种表达是方便和可接受的。
    为了了解下面字符串的ASCII表达,只需对字符串执行一些算术运算。最简单和计算上最有效的方法是取数组的绝对值。例如,
» u=abs(t)
u =
  Columns 1 through 12
    72  111  119    32    97    98  111  117  116    32  116  104
  Columns 13 through 24
  105  115    32    99  104    97  114    97    99  116  101  114
  Columns 25 through 32
    32  115  116  114  105  110  103    63
» u=t+0
u =
  Columns 1 through 12
    72  111  119    32    97    98  111  117  116    32  116  104
  Columns 13 through 24
  105  115    32    99  104    97  114    97    99  116  101  114
  Columns 25 through 32
    32  115  116  114  105  110  103    63
    在上面后一个例子里,加零到字符串也改变了它的ASCII的表示。函数setstr提供了逆转换。
        » v=setstr(u)
        v =  How about this character string?
因为字符串是数值数组,它们可以用MATLAB中所有可利用的数组操作工具进行操作。例如,
            » u=t(16:24)
            u =  character
matlab二进制字符串转数组字符串象数组一样进行编址。这里元素1624包含单词character
            » u=t(24:-1:16)
            u =  retcarahc
这是单词character的反向拼写。
                » u=t(16:24)'
                u =
                c
                h
                a
                r
                a
                c
                t
                e
                r
用转置算子将单词character变换成一个列。
        » v=' I can''t find the manual! '
        v =  I can't find the manual!
字符串内的单引号是由两个连续的单引号来表示。
字符串连接可以直接从数组连接中得到。
    » u=' If a woodchuck could chuck wood, ' ;
    » v=' how much wood would a woodchuck chuck? ' ;
    » w=[u  v]
    w =  If a woodchuck could chuck wood, how much wood would a woodchuck chuck?
    函数disp允许不打印它的变量名而显示一个字符串。例如,
        »disp(u)
        If a woodchuck could chuck wood,
注意u = 语句被去掉了。这对脚本文件内显示帮助的文本有用。
    如同矩阵,字符串可以有多个行,但每行必须有相同数目的列数。因此,显然要用空格以使所有行有相同长度,例如,
        » v=[' Character strings having more  than '
            ' one row must have the same number '
            ' of column just like matrices!        ']
        v =
        Character strings having more than
        one row must have the same number
        of column just like matrices!
    考虑下面例子,它把一个字符串转换成大写。首先,函数find用来出小写字符的下标值,然后,从小写元素中只减去小写与大写之差,最后,用setstr把求得的数组转换成它的字符串表示。
    » disp(u)
    If a woodchuck could chuck wood,
    » i=find(u>=' a ' & u<= ' z ');    %  find is a very powerful function!
    » u(i)=setstr(u(i)-(' a '-' A '))
    u =  IF A WOODCHUCK COULD CHUCK WOOD,
    事实上,如在3.7节所描述的,矩阵能由单个下标标识。而不是由行和列下标标识,所以上面例子对字符串矩阵v也同样适用:
    » disp(v)
    Character strings having more than
    one row must have the same number
    of column just like matrices!   
» i=find(v>=' a ' & v<=' z ');    %  here i is a single index vector into v,
    » v(i)=setstr(v(i)-(' a '-' A '))    %  and matrix keeps the same orientation.
    v =
    CHARACTER STRINGS HAVING MORE THAN
    ONE ROW MUST HAVE THE SAME NUMBER
    OF COLUMN JUST LIKE MATRICES!
    最后,当使用前面脚本文件这一章节中的函数input时,字符串是很有用的。
        » t=' Enter number of rolls of tape > ' ;
        » tape=input(t)
        Enter number of rolls of tape > 5
        tape =  5
    另外,函数input能输入一个字符串:
        » x=input(' Enter anything > ',' s ')
        Enter anything > anything can be entered
        x =  anything can be entered
    这里,在函数input里的附加参量’s’告诉MATLAB,作为一个字符串,只要把用户输入传送到输出变量,就不需要引号。事实上,如果将引号包括进去,它们就变成返回字符串的一部分。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。