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

  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/fzzl/p/1428587.html
Copyright © 2011-2022 走看看