zoukankan      html  css  js  c++  java
  • 【转】MATLAB字符串数组

    http://www.freeworld.net.cn/Article/Catalog48/9762.html

    4.1 字符串数组

    4.1.1 字符串入门

    【 * 例 4.1.1 -1 】先请读者实际操作本例,以体会数值量与字符串的区别。
    clear % 清除所有内存变量
    a=12345.6789 % 给变量 a 赋数值标量
    class(a) % 对变量 a 的类别进行判断
    a_s=size(a) % 数值数组 a 的“大小”
    a =
    1.2346e+004
    ans =
    double
    a_s =
    1 1

    b='S' % 给变量 b 赋字符标量(即单个字符)
    class(b) % 对变量 b 的类别进行判断
    b_s=size(b) % 符号数组 b 的“大小”
    b =
    S
    ans =
    char
    b_s =
    1 1
    whos % 观察变量 a,b 在内存中所占字节
    Name Size Bytes Class
    a 1x1 8 double array
    a_s 1x2 16 double array
    ans 1x4 8 char array
    b 1x1 2 char array
    b_s 1x2 16 double array
    Grand total is 10 elements using 50 bytes


    4.1.2 串数组的属性和标识

    【 * 例 4.1.2 -1 】本例演示:串的基本属性、标识和简单操作。

    (1)创建串数组
    a='This is an example.'
    a =
    This is an example. 

    (2)串数组 a 的大小
    size(a)
    ans =
    1 19

    (3)串数组的元素标识
    a14=a(1:4) % 提出一个子字符串
    ra=a(end:-1:1) % 字符串的倒排
    a14 =
    This
    ra =
    .elpmaxe na si sihT

    (4)串数组的 ASCII 码
    ascii_a=double(a) % 产生 ASCII 码
    ascii_a =
    Columns 1 through 12
    84 104 105 115 32 105 115 32 97 110 32 101
    Columns 13 through 19
    120 97 109 112 108 101 46
    char(ascii_a) % 把 ASCII 码变回字符串
    ans =
    This is an example.

    (5)对字符串 ASCII 码数组的操作
    % 使字符串中字母全部大写
    w=find(a>='a'&a<='z'); % 找出串数组 a 中,小写字母的元素位置。
    ascii_a(w)=ascii_a(w)-32; % 大小写字母 ASCII 值差 32. 用数值加法改变部分码值。
    char(ascii_a) % 把新的 ASCII 码翻成字符
    ans =
    THIS IS AN EXAMPLE.

    (6)中文字符串数组
    A=' 这是一个算例。 '; % 创建中文字符串
    A_s=size(A) % 串数组的大小
    A56=A([5 6]) % 取串的子数组
    ASCII_A=double(A) % 获取 ASCII 码
    A_s =
    1 7
    A56 =

    算例
    ASCII_A =
    Columns 1 through 6
    54754 51911 53947 47350 52195 49405
    Column 7
    41379

    char(ASCII_A) % 把 ASCII 码翻译成字符
    ans =
    这是一个算例。

    (7)创建带单引号的字符串
    b='Example '' 4.1.2 -1'''
    b =
    Example ' 4.1.2 -1'

    (8)由小串构成长串
    ab=[a(1:7),' ',b,' .'] % 这里第 2 个输入为空格串
    ab =
    This is Example ' 4.1.2 -1' .


    4.1.3 复杂串数组的创建

    4.1.3.1 多行串数组的直接创建

    【 * 例 4.1.3 .1-1 】多行串数组的直接输入示例。
    clear
    S=['This string array '
    'has multiple rows.']
    S =
    This string array
    has multiple rows.
    size(S)
    ans =
    18


    4.1.3.2 利用串操作函数创建多行串数组

    【 * 例 4.1.3 .2-1 】演示:用专门函数 char , str2mat , strvcat 创建多行串数组示例。
    S1=char('This string array','has two rows.')
    S1 =
    This string array
    has two rows.
    S2=str2mat(' 这 ',' 字符 ',' 串数组 ',' 由 4 行组成 ')
    S2 =

    字符
    串数组
    由4 行组成
    S3=strvcat(' 这 ',' 字符 ',' 串数组 ',' ',' 由 4 行组成 ')% “空串”会产生一个空格行
    S3 =

    字符
    串数组
    由 4 行组成
    size(S3)
    ans =
    5 5


    4.1.3.3 转换函数产生数码字符串

    【 * 例 4.1.3 .3-1 】最常用的数组 / 字符串转换函数 int2str , num2str , mat2str 示例。

    (1) int2str 把整数数组转换成串数组(非整数将被四舍五入园整后再转换)
    A=eye(2,4); % 生成一个 MATLAB数值数组
    A_str1=int2str(A) % 转换成 MATLAB串数组。请读者自己用 size 检验。
    A_str1 =
    1 0 0 0
    0 1 0 0

    (2) num2str 把非整数数组转换为串数组(常用于图形中,数据点的标识)
    rand('state',0)
    B=rand(2,4); % 生成数值矩阵
    B3=num2str(B,3) % 保持 3 位有效数字,转换为串
    B3 =
    0.95 0.607 0.891 0.456
    0.231 0.486 0.762 0.0185

    (3) mat2str 把数值数组转换成输入形态的串数组(常与 eval 指令配用)
    B_str=mat2str(B,4) % 保持 4 位有效数字,转换为“数组输入形式”串
    B_str =
    [0.9501 0.6068 0.8913 0.4565;0.2311 0.486 0.7621 0.0185]
    Expression=['exp(-',B_str,')']; % 相当于指令窗写一个表达式 exp(-B_str)
    eval(Expression) % 把 exp(-B_str) 送去执行
    ans =
    0.3867 0.5451 0.4101 0.6335
    0.7937 0.6151 0.4667 0.9817


    【 * 例 4.1.3 .3-2 】综合例题:在 MATLAB 计算生成的图形上标出图名和最大值点坐标。
    clear % 清除内存中的所有变量
    a=2; % 设置衰减系数
    w=3; % 设置振荡频率
    t=0:0.01:10; % 取自变量采样数组
    y=exp(-a*t).*sin(w*t); % 计算函数值,产生函数数组
    [y_max,i_max]=max(y); % 找最大值元素位置
    t_text=['t=',num2str(t(i_max))]; % 生成最大值点的横坐标字符串 <7>
    y_text=['y=',num2str(y_max)]; % 生成最大值点的纵坐标字符串 <8>
    max_text=char('maximum',t_text,y_text);% 生成标志最大值点的字符串 <9>
    % 生成标志图名用的字符串
    tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)']; %<11>
    plot(t,zeros(size(t)),'k') % 画纵坐标为 0 的基准线
    hold on % 保持绘制的线不被清除
    plot(t,y,'b') % 用兰色画 y(t) 曲线
    plot(t(i_max),y_max,'r.','MarkerSize',20) % 用大红点标最大值点
    text(t(i_max)+0.3,y_max+0.05,max_text) % 在图上书写最大值点的数据值 <16>
    title(tit),xlabel('t'),ylabel('y'),hold off% 书写图名、横坐标名、纵坐标名

    MATLAB

    图 4.1.3 .3-1 字符串运用示意图



    4.1.3.4 利用元胞数组创建复杂字符串

    【 * 例 4.1.3 .4-1 】元胞数组在存放和操作字符串上的应用。
    a='MATLAB 5 ';b='introduces new data types:'; % 创建单行字符串 a,b
    c1=' ◆ Multidimensional array';c2=' ◆ User-definable data structure';
    c3=' ◆ Cell arrays';c4=' ◆ Character array';
    c=char(c1,c2,c3,c4); % 创建多行字符串 c
    C={a;b;c}; % 利用元胞数组存放长短不同的字符串 <5>
    disp([C{1:2}]) % 显示前两个元胞中的字符内容 <6>
    disp(' ') % 显示一行空白
    disp(C{3}) % 显示第 3 个元胞中的字符内容 <8>
    MATLAB 5 introduces new data types:
    ◆ Multidimensional array
    ◆ User-definable data structure
    ◆ Cell arrays
    ◆ Character array


    4.1.4 串转换函数

    【 * 例 4.1.4 -1 】 fprintf, sprintf, sscanf 的用法示例。
    rand('state',0);a=rand(2,2); % 产生 MATLAB随机阵
    s1=num2str(a) % 把数值数组转换为串数组
    s_s=sprintf('%.10e\n',a) %10 数位科学记述串 , 每写一个元素就换行。
    s1 =
    0.95013 0.60684
    0.23114 0.48598
    s_s =
    9.5012928515e-001
    2.3113851357e-001
    6.0684258354e-001
    4.8598246871e-001

    fprintf('%
    .5g \\',a) % 以 5 位数位最短形式显示。不能赋值用
    0.95013\0.23114\0.60684\0.48598\

    s_sscan=sscanf(s_s,'%f',[3,2])% 浮点格式把串转换成成 MATLAB数值数组。
    s_sscan =
    0.9501 0.4860
    0.2311 0
    0.6068 0

  • 相关阅读:
    shell命令--stat
    英文段子
    OCP读书笔记(16)
    shell命令--uptime
    OCP读书笔记(15)
    shell命令--dmesg
    OCP读书笔记(14)
    shell命令--hostname
    OCP读书笔记(13)
    shell命令--uname
  • 原文地址:https://www.cnblogs.com/fzzl/p/1428587.html
Copyright © 2011-2022 走看看