CharacterArray(CharArray)创建字符数组_第1页
CharacterArray(CharArray)创建字符数组_第2页
CharacterArray(CharArray)创建字符数组_第3页
CharacterArray(CharArray)创建字符数组_第4页
CharacterArray(CharArray)创建字符数组_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、字符数组字符数组 Character Array ( Char Array ) 一、创建字符数组 二、字符数组的操作 三、字符串和数值之间的转换函数 四、不同数制之间的转换函数 在MATLAB中,字符串(string)是作为字符数 组来引入的。字符串按行向量进行存储,每一字符以 其在字符集中的内部编码的形式存放。 1、 用单引号对用单引号对 创建字符串(一维字符数组)创建字符串(一维字符数组) s1 = %生成一个空字符串 s2 = M s3 = MathWorks s4 = Accelerating the pace of engineering and science s5 = Youre

2、 right! s6 = 矩阵实验室 p必须将待建字符串放在单引号对单引号对中; p每个字符占一个元素位,两个字节; p当字符串中本身包含单引号时,每个单引号符用连续的两个连续的两个 单引号单引号表示; 注意:必须在英文状态下输入“单引号对”。 一、创建字符数组一、创建字符数组 2、使用、使用 内部编码内部编码 创建字符串创建字符串 s = char(x) 用字符的内部编码 x 创建相应的字符数组s,x为非 负整数数组,实际的字符显示和给定的字符编码有关。x的范围 为从0到65535,任何在此范围外的数据都没有定义。 字符编码的前128个编码即为ASCII码 s1 = char() %生成空字

3、符串 s2 = char(97) s3 = char(97:122) s4 = char(97:122;65:90) x = 19968:19968+99 X = reshape(x,10,10) X = X s = char(X) 附附:ASCII:ASCII码表码表(7(7位位) ) 高三位高三位 b b6 6b b5 5b b4 4 低四位低四位 b b3 3b b2 2b b1 1b b0 0 获取字符数组的内部编码获取字符数组的内部编码 x =double(s) 或 x = abs(s) 把字符数组s转换为对应的内部编 码数值数组x。可以对内部编码数值数组x进行数值数组的各种运 算。

4、但其结果就变成一般数值向量的运算,而不再是字符串的运 算,可使用char( ) 函数把运算结果转化为对应字符串。 t = matlab x = double(t) - 32 s = char(x) miwen = Rfyqfg%2%Ymj%Qfslzflj%Tk%Yjhmsnhfq%Htruzynsl 恺撒密码 凯撒密码作为一种最为古老的对称加密体制,在古罗马 的时候都已经很流行,它的基本思想是:通过把字母移动一定 的位数来实现加密和解密。例如,如果密匙是把明文字母的位 数向后移动三位,那么明文字母B就变成了密文的E,依次类推, X将变成A,Y变成B,Z变成C,由此可见,位数就是凯撒密码 加密

5、和解密的密钥。这个加密方法是以恺撒的名字命名的,当 年恺撒曾用此方法与其将军们进行联系。 练习:练习:上面的密文是将明文的每个字符(包括字母、空格、符 号)按acsii码表后移5位得到的,请破译这段密文。 3、用、用 , 创建字符串(一维字符数组)创建字符串(一维字符数组) 利用方括号 ,可将多个字符串变量用逗号“ , ” 连接,构成一个长的单行字符串。 t1 = ; t2 = MATLAB - ; t3 = The Language Of Technical Computing; t4 = 科学计算语言; s1 = t1, t2, t3 s2 = t2, t3 s3 = t1, t2, t4

6、 s4 = t2, t1, t4 4、用用 ; 创建多行(二维)字符数组创建多行(二维)字符数组 t1 = Hello, ; t2 = Nice to meet you!; s=t1; t2 ? Error using = vertcat CAT arguments dimensions are not consistent. 利用方括号 ,可将多个字符串变量用分号“ ; ” 连接,构成一个多行字符串(二维字符数组),但是 必须保证各行等长必须保证各行等长(每行的字符数目相等)。 解决办法:解决办法:必须保证各行等长,可 在较短字符串的末尾增加适当数量的 “空格” 。 错误原因:错误原因: t

7、1 6个字符 t2 17个字符 t1 = Hello, ; t2 = blanks(11); t3 = ; t4 = Nice to meet you!; s1 = t1, t2; t4 s2 = t1, t2; t3; t4 s = blanks(n) : 生成一个包含 n 个空格的字符串s s1 = Hello, Nice to meet you! s2 = Hello, Nice to meet you! 空字符串会被忽略掉空字符串会被忽略掉 5、 利用函数创建字符数组利用函数创建字符数组 t1 = Hello, ; t2 = ; t3 = Nice to meet you!; s1 =

8、 char(t1, t3) s2 = char(t1, t2, t3) s1 = Hello, Nice to meet you! s2 = Hello, Nice to meet you! S = char(t1, t2, t3, .) 把t1,t2,t3,.作为行 ,空字符串不空字符串不 会被忽略,会被忽略,生成二维字符数组S,不必考虑每行的字符数是否 相等,S的行数等于t1,t2,.的行数之和,S的列数等于最长的 字符串的字符数目,较短字符串的末尾用空格补齐。每个字符 参数 ti,本身是字符数组。 t1 = Hello, ; t2 = ; t3 = Nice to meet you!;

9、s1 = str2mat(t1, t3) s2 = str2mat(t1, t2, t3) s1 = Hello, Nice to meet you! s2 = Hello, Nice to meet you! S = str2mat (t1, t2, t3, .) 把t1,t2,t3,.作为行,空字符串不空字符串不 会被忽略,会被忽略,生成二维字符数组S,不必考虑每行的字符数是否 相等, S的行数等于t1,t2,.的行数之和, S的列数等于最长的 字符串的字符数目,较短字符串的末尾用空格补齐。每个字符 参数 ti,本身是字符数组。 str2mat(t1,t2,.)的功能与char(t1,t2

10、,.) 一样,matlab在帮助中说明: This routine will become obsolete(已不用 的;已废弃的;过时的 ) in a future version. Use char instead s1 = Hello, Nice to meet you! s2 = Hello, Nice to meet you! S = strvcat (t1, t2, t3, .) 把t1,t2,t3,.作为行,空字符串会空字符串会 被忽略掉,被忽略掉,生成二维字符数组S,不必考虑每行的字符数是否 相等, S的行数等于t1,t2,.的行数之和, S的列数等于最长的 字符串的字符数目,

11、较短字符串的末尾用空格补齐。每个字符 参数 ti,本身是字符数组。 t1 = Hello, ; t2 = ; t3 = Nice to meet you!; s1 = strvcat(t1, t3) s2 = strvcat(t1, t2, t3) t = strcat(s1, s2, s3, .) 将字符数组s1,s2,s3的对应行级 联(在水平方向上)。所有输入数组必须具有相同的行数。输入 字符数组中尾部的空格被忽略,不出现在输出中。 a = hello b = goodbye c = strcat(a, b) c = hellogoodbye s1 = strvcat(MathWorks

12、 - ,Matlab - ) s2 = Accelerating the pace of engineering and science s3 = The Language Of Technical Computing s4 = strvcat(s2,s3) s5 = strcat(s1,s4) 二二、字符、字符数组的数组的操作操作 1. 字符数组中元素及子数组的访问与赋值 2. 一些通用函数 3. 字符串检测函数 4. 简单的字符串处理函数 5. 字符串比较函数 6. 字符串替换和查找函数 7. 字符串执行函数 1、字符数组中元素及子数组的访问与赋值、字符数组中元素及子数组的访问与赋值 与数

13、值数组一样,可用双下标,也可用单下标访问字 符数组中的元素和子数组。 s = strvcat(MathWorks,Matlab) ch1 = s(2,5) ch2 = s(11) s1 = s(:,end:-1:1) s(16) = x s(2,9) = y s(:,1) = s(:,end) = z d = s(:) 练习:试写出这些matlab语句的输 出结果,并在matlab中进行验证。 2、一些通用函数、一些通用函数 size( ) 获得字符数组的大小(行数、列数) length( ) 获得字符数组的长度(行数、列数中的较大值) numel( ) 获得字符数组的字符总数(总数 =行数列

14、数) disp( ) 在command windows中显示字符数组的内容 sort( ) 按照字符的内部编码值对字符串排序 s = strvcat(MathWorks,Matlab); len = length(s) r,c=size(s) n = numel(s) disp(s) s1 = sort(s) s2 = sort(s,2) s2 = sort(s,descend) s2 = sort(s,2,descend) 练习:试写出这些matlab语句的 输出结果,并在matlab中进行验 证。 S. 或 S 对字符数组S进行转置操作 reshape(S,m,n ) 总元素数目不变,改变

15、字符数组的行、列 repmat(S,m,n ) 按指定行、列平铺字符数组 rot90(S,k) 逆时针旋转字符数组 fliplr(S) 左右翻转字符数组 flipud (S ) 上下翻转字符数组 s = char(65:89) s1 = reshape(s, 5, 5) s2 = s1. s3 = rot90(s2) s4 = fliplr(s3) s5 = flipud(s4) s6 = repmat(s5,2,2) 练习:试写出这些matlab语句的 输出结果,并在matlab中进行验 证。 diag(S,k ) 提取二维字符数组S的第k条对角线元素 diag(t,k ) 构成二维字符数组

16、,其第k条对角线的元素由一维 字符数组 t 中的元素构成 ,其余位置元素为字符char(0) tril(S) 、triu(S) 提取字符数组的下(上)三角元素,其余位置 元素以字符char(0)替换 x = reshape(65:89, 5, 5) s = char(x) s1 = tril(s) s2 = triu(s) s3 = diag(s,1) s4 = diag(s3) 练习:试写出这些matlab语句的 输出结果,并在matlab中进行验 证。 tf = ischar(A) 判断输入A是否为字符数组 ,如果输入数组A是 字符数组,则返回逻辑1(真),否则返回逻辑0(假)。 tf =

17、 isletter(str) 返回大小和str一致的逻辑数组tf,当str中元素 为英文字母时,tf对应的元素为1,否则为0 tf = isspace(str) 返回大小和str一致的逻辑数组tf,当str中元 素为空格、回车、制表、换行符等时,tf对应的元素为1,否则 为0。 3、字符串检测函数、字符串检测函数 t1 = 1234abcdef t2 = Mat 矩阵 t3 = Matlab s = char(t1, t2, t3) L1 = ischar(s) L2 = isletter(s) L3 = isspace(s) blanks(n) 创建有n个空格组成的字符串 deblank(s

18、) 删除字符串尾部的空格 strtrim(s) 删除字符串的开头和尾部的空格,制表,回车符 lower(s) 将字符串中的字母转换成小写 upper(s) 将字符串中的字母转换成大写 b = blanks(10) t = Matlab 2008a s = b, t ,b, t, b L = length(s) s1 = deblank(s) L1 = length(s1) s2 = strtrim(s1) L2 = length(s2) s3 = lower(s2) s4 = upper(s3) 练习:试写出这些matlab语句的 输出结果,并在matlab中进行验 证。 4、简单的字符串处理

19、函数、简单的字符串处理函数 strjust() 调整字符串排列位置 T = strjust(S)右对齐 T = strjust(S, right)右对齐 T = strjust(S, left)左对齐 T = strjust(S, center)居中 S = blanks(10), a b c d e, blanks(30) T1 = strjust(S) T2 = strjust(S, right) T3 = strjust(S, left) T4 = strjust(S, center) 若字符串前部或尾部没有空格,则左对齐、右对齐、 居中的效果完全相同。 TF = strcmp(str1

20、, str2 ) 比较字符串str1和str2是否完全相等,是,返回逻辑1(真),否,返 回逻辑0(假) TF = strcmpi(str1, str2 ) 比较字符串str1和str2是否完全相等,忽略字母大小写 TF = strncmp(str1, str2, n ) 比较字符串str1和str2前n列字符是否相等, TF = strncmpi(str1, str2 , n ) 比较字符串str1和str2前n个字符是否相等,忽略字母大小写 5、字符串比较函数、字符串比较函数 str = strrep(str1, str2, str3) 进行字符串替换,区分大小写。把str1中所有的子字符

21、串str2 用str3来替换 6、字符串替换和查找函数、字符串替换和查找函数 s1 = This is a good example.; str = strrep(s1, good, great) str = This is a great example. strrep( )字符串替换 strfind( )查找字符串 findstr( )查找字符串 strmatch( )寻找符合条件的行 strtok( ) 在字符串里找出指定标记之前的子字符串 k = strfind(str, pattern) 在长字符串 str 中查找是否包含有短字符串 pattern。 若包含,返回数组k,其元素为pa

22、ttern出现在str中的位置 若不包含,则返回空数组。 s1 = Find the starting indices of the pattern string; s2 = in; k1 = strfind(s1, s2) k2 = strfind(s2, s1) k3 = findstr(s1, s2) k4 = findstr(s2, s1) k1 = 2 15 19 45 k = findstr(str1,str2) 查找str1和str2中,较短字符串在较长字符串中出现的位置,没 有出现返回空数组。结果与str1、str2的顺序无关。 k2 = ? k3 = ? k4 = ? x =

23、 strmatch(str, STRS) 检查字符数组STRS的每一行,若该 行是以字符串str开始的,就把该行的行号输出至列数组x中。 x = strmatch(str, STRS, exact)检查字符数组STRS的每一行, 若该行与str完全相同,就把该行的行号输出至列数组x中。 t1 = max t2 = minimax t3 = maximum t4 = max imum t5 = max就是最大的意思 S = char(t1,t2,t3,t4,t5) x1 = strmatch(t1,S) x2 = strmatch(t1,S,exact) token = strtok(str,

24、delimiter) token, remain = strtok(str, .) str:字符串 delimiter:指定的分隔符,未指定delimiter的话,默认为空格 char(32), 水平制表符char(9) 和回车char(13)。 s = aaabcd,char(32),matlab,char(32),矩阵实验室 t1, r1 = strtok(s) t2, r2 = strtok(s,a) t3, r3 = strtok(s,b) t4, r4 = strtok(s,w) 练习:试写出这些matlab语句的输出 结果,并在matlab中进行验证。 从str的第一个元素开始,第

25、一个非分隔字符与其之后的 第一个分隔符之间的字符串返回至token,之后的部分返回至 remain;若第一个非分隔字符之后没有分隔符,则从第一个非 分隔字符直到str的最后一个字符都被返回至token,remain则 为空串。 使用eval( )命令“执行”某一字符串,就如同用户在MATLAB 的Command窗口中输入此字符串并执行一样。 7、字符串、字符串执行函数执行函数eval( ) eval(expression) 在matlab中执行expression clc clear all s1 = a = 2; s2 = 3*a; eval(s1) b = eval(s2) s3 = c

26、= ,s2; eval(s3) whos Name Size Bytes Class a 1x1 8 double b 1x1 8 double c 1x1 8 double s1 1x5 10 char s2 1x3 6char s3 1x7 14char a1, a2, a3, . = eval(myfun(b1, b2, b3, .) 执行函数myfun,输入参数为b1,b2,.,输出参数为a1,a2,. eval(a1, a2, a3, . = myfun(b1, b2, b3, .) 也可以执行函数myfun,输入为b1,b2,.,输出为a1,a2,. x = pi s = y =

27、sin(x) eval(s) x = pi s = sin(x) y = eval(s) 这种方式的语法检查不是很严格, 可能会产生未曾捕获过的错误或 不可预期的行为。 不建议使用这种方式不建议使用这种方式 clc clear all for n = 1:5 xn=n; end clc clear all for n = 1:5 s=x,int2str(n),=n; eval(s); end 这些语句执行完后,matlab的工作区中共有几个变量?变量名是 什么?变量的值是什么?若换成右边的语句情况如何? clc clear all x = eye(3); for r = 1:3 for c =

28、 1:3 s = x( , int2str(r) , , , int2str(c) , ) = , int2str(x(r,c); disp(s); end end 这些matlab语句在屏幕上输出的结果是什么?在 matlab中验证你的想法是否正确。 三、字符串和数值之间的转换函数 int2str( )整数转换为字符串 num2str( )数值转换为字符串 mat2str ( ) 矩阵转换为字符串 str2double( )字符串转换为双精度 str2num( )字符串转换为数值 str = int2str(N)将整数转换为整数格式的字符串。输入参数 N可以是单一的整数、整数向量或整数矩阵。

29、非整型值在转换前 都会被四舍五入取整。 x = 2, 3, 5.7, 1/3, 2/3 s = int2str(x) s = 2 3 6 0 1 str = num2str (A)对数组A中元素取四位精度,并转换为相对 应的字符串str ,末尾多余的0将省略 str = num2str(A, precision) 对数组A中元素按照指定的精 度precision取值,并转换为相对应的字符串str, 末尾多余的0将 省略 。参数precision指定输出字符str的位数。 str = num2str(A, format) 按照指定的格式format来转化,具 体的format可参考fprintf

30、函数的帮助中的相关说明。 x = 2, 3, 5.7, 1/3, 2/3 s1 = num2str(x) s2 = num2str(x,4) s3 = num2str(x,%11.4f) s1 = 2 3 5.7 0.33333 0.66667 s2 = 2 3 5.7 0.3333 0.6667 s3 = 2.0000 3.0000 5.7000 0.3333 0.6667 str = mat2str(A) 将矩阵A转化为字符,包含括号包含括号 ,这样可 以使用eval(str) 命令产生原始矩阵(使用15位精度)。 str = mat2str(A,n) 使用 n 位精度将矩阵A转化为字符

31、t = magic(3) s = mat2str(t) A = eval(s) format long t = randn(3) s1 = mat2str(t) s2 = mat2str(t, 4) t1 = eval(s1) t2 = eval(s2) s = 8 1 6;3 5 7;4 9 2 A = 8 1 6 3 5 7 4 9 2 X = str2double(str )把字符串str转换为双精度数值 若str2double()无法返回有效的双精度数值,则返回NaN。 a = str2double(123.45e7) b = str2double(123 + 45i) c = str

32、2double(3.14159) d = str2double(2.7i - 3.14) e = str2double(1,200.34) f = str2double(3.4a) s = 12 d1 = double(s) d2 = str2double(s) d1 = ? d2 = ? 字符串str内可以包含下列字符: digits, a comma (thousands separator), a decimal point, a leading + or - sign, an e preceding a power of 10 scale factor, and an i for a

33、complex unit. X = str2double(C) C为cell数组,用大括号 创建,其元素为字符串 X为与C同维的数值数组,其元素为C数组中的每个字符串转 换后的双精度数值,若str2double()无法返回有效的双精度数 值,则返回NaN。 C1 = 12, 3.45; -5.6e-1, 7+8i C2 = b12, 3 4; 5.6, 7 X1 = str2double(C1) X2 = str2double(C2) X1 = 12.0000 3.4500 -0.5600 7.0000 + 8.0000i X2 = NaN NaN 5.6000 7.0000 X = str2num(str ) 把字符串str转换为双精度数值(组),若 str2num()无法返回有效的数值,则返回空数组 s1 = 1 2 ; 3 4 s2 = 1 2m ; 3 4i d1 = str2num(s1) d2 = str2num(s2) d1 = ? d2 = ? 字符串str内可以包含如下字符: * Digits(数字) * A decimal point(小数点) * A leading + or sign(正号、负号) * A letter e or d prece

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论