建网站建网站,怎么做cc网站,网销可以做推广的网站,西安企业100强名单3.字符和字符串在MATLAB中#xff0c;几个字符(Character)可以构一个字符串(String)。一个字符串被视为一个行向量#xff0c;而字符串中的每一个字符(含空格符)#xff0c;则是以其ASCII的形式存放于此向量的每一个元素中#xff0c;只是它的外显形式仍然是可读的字符。字…3.字符和字符串在MATLAB中几个字符(Character)可以构一个字符串(String)。一个字符串被视为一个行向量而字符串中的每一个字符(含空格符)则是以其ASCII的形式存放于此向量的每一个元素中只是它的外显形式仍然是可读的字符。字符串类型在数据的可视化、应用程序的交互方面有着非常重要的作用。3.1 创建字符串1一般字符串的创建在MATLAB中所有的字符串都用两个单引号括起来进行输入赋值。如在MATLAB命令窗口中输入 amatlaba matlab字符串的每个字符(空格也是字符)都是相应矩阵的一个元素上述变量a是1×6阶的矩阵可以用size(a)命令查得 size(a)ans 1 6 % 1行6列2中文字符串的创建中文也可以作为字符串的内容。但需要注意的是在中文字符串的输入过程中两边的单引号必须是英文状态的单引号。例如 A中文字符串输入演示A 中文字符串输入演示3字符串的寻访在MATLAB中字符串的寻访可以通过其坐标来实现。在一个字符串中MATLAB按照从左至右的顺序对字符串中的字符依次编号(123…)。进行字符串的寻访只需要像寻访一般矩阵那样即可。例如在前面创建了中文字符串A之后可以得到 A(3:5)ans 字符串4字符串数组的创建二维字符串(数组)的建立也非常简单。可以像数值数组的建立那样直接输入也可以使用str2mat等函数建立。【例3-6】 多行串数组的直接输入示例。 clear S[This string array has multiple rows.]S This string arrayhas multiple rows. size(S)ans 2 18需要注意的是在直接输入多行字符串数组的时候每一行的字符个数必须相同。【例3-7】 使用函数str2mat创建多行串数组示例。 astr2mat(这,字符,串数组,,由5 行组成)a 这字符串数组由5 行组成 size(a)ans 5 6在使用函数str2mat创建字符串数组的时候不用担心每一行的字符个数是否相等函数在运行中会以字符最多的一行为准而将其他行中的字符以空格补齐。3.2 字符串比较在MATLAB中有多种对字符串进行比较的功能(1)比较两个字符串或者子串是否相等(2)比较字符串中的单个字符是否相等(3)对字符串内的元素分类判断每个元素是否是字符或者空格。用户可以使用下面4个函数中的任意一个来判断两个输入字符串是否相等。(1)strcmp判断两个字符串是否相等。(2)strncmp判断两个字符串的前n个字符是否相等。(3)strcmpi和strncmpi这两个函数的作用分别与strcmp和strncmp相同只是在比较的过程中忽略了字母大小写。考虑有这两个字符串str1 hello;str2 help;字符串str1和str2并不相等所以使用strcmp函数来判断的话将会返回逻辑0(false)。例如C strcmp(str1,str2)C 0由于字符串str1和str2的前3个字符相等所以用strncmp函数来比较前3个以内字符将会返回逻辑1(true)。例如C strncmp(str1, str2, 2) % 比较前两个字符C 1下面介绍如何对大小写不同的情况进行比较。 str3 Hello; D strncmp(str1, str3,2) % 对大小写敏感D 0 F strncmpi(str1, str3,2) % 对大小写不敏感F 1用户可以使用关系运算符进行字符串的比较只要比较的数组具有相同的尺寸或者其中一个是标量即可。例如可以使用()运算符来判断两个字符串中有哪些字符相等。A fate;B cake;A Bans 0 1 0 1所有的关系运算符都可以用来比较字符串相对应位置上的字符。3.3字符串查找与替换MATLAB提供了很多函数供用户进行字符串的查找与替换。更加强大的是MATLAB也支持在字符串的查找与替换中使用正则表达式。通过灵活使用正则表达式可以对字符串进行各种形式的查找与替换。至于正则表达式的应用用户可以查询帮助文档中的Regular Expressions部分。【例3-8】 使用strrep函数进行字符串查找替换示例。考虑有这样一个标签 label Sample 1, 03/28/15label Sample 1, 03/28/15函数strrep用于实现一般的查找与替换功能。本例中使用strrep函数将日期从03/28替换为03/30。命令如下 newlabel strrep(label, 28, 30)newlabel Sample 1, 03/30/15【例3-9】 使用findstr函数进行字符串查找示例。findstr函数用于返回某一子串在整个字符串中的开始位置。例如在字符串中查找字母a和oo出现的位置可以使用如下命令 strtemphave a good time!strtemp have a good time! position1 findstr(a, strtemp)position1 2 6 position2 findstr(oo, strtemp)position2 9从本例可以看出字母a出现在第2和第6两个位置这说明findstr函数返回的位置信息包括所有出现的子串的位置。而字母oo字串只出现了一次所以只返回一个位置信息。strtok函数用于返回分隔字符第1次出现之前的字符。如果不自行指定分隔字符默认的分隔字符则是泛空格符字符因此用户可以使用strtok函数将一个句子按照单词分开。【例3-10】 使用strtok函数进行字符串查找示例。 tI have walked out on a handful ofmovies in my life.; % 测试字符串 remain t; while true % 使用while循环结构[str, remain] strtok(remain); % 以默认的空格为分隔符查找if isempty(str), break; end % 循环跳出控制disp(sprintf(%s, str)) % 显示结果end以下就是使用strtok函数进行多次查找得到的结果Ihavewalkedoutonahandfulofmoviesinmylife.函数strmatch用于查找一个字符数组中以指定子串开始的字符串该函数返回的是以指定子串开始的行编号。【例3-11】 使用strmatch函数进行字符串查找示例。 maxstrings strvcat(max, minimax,maximum) % 测试字符串数组maxstrings maxminimaxmaximum strmatch(max, maxstrings) % 在测试字符串数组中查找以max开头的字符串ans 13在本例中第二行minimax虽然也包含max子串但是这个子串的并不是以max开始的所以在查找过程中没有返回第2行为结果。3.4 类型转换在MATLAB中允许不同类型的数据和字符串类型的数据之间进行转换这种转换需要使用不同的函数完成。另外同样的数据特别是整数数据有很多种表示的格式例如十进制、二进制或者十六进制。在C语言中需要使用printf函数通过相应的格式字符串就可以输出不同格式的数据。而在MATLAB中则直接提供了相应的函数可以完成数制的转换。表3-2和表3-3分别列举了这些函数。表3-2 数字与字符串之间的转换函数函 数说 明函 数说 明num2str将数字转换为字符串str2num将字符串转换为数字int2str将整数转换为字符串sprintf格式化输出数据到命令行窗口mat2str将矩阵转换为eval函数可以使用的字符串sscanf读取格式化字符串str2double将字符串转换为双精度类型的数据表3-3 不同数值之间的转换函数函 数说 明函 数说 明hex2num将十六进制整数字符串转换为双精度数据dec2bin将十进制整数转换为二进制整数字符串hex2dec将十六进制整数字符串转换为十进制数据base2dec将指定数制类型的数字字符串转换为十进制整数dec2hex将十进制数据转换为十六进制整数字符串dec2base将十进制整数转换为指定数制类型的数字字符串bin2dec将二进制整数字符串转换为十进制整数在表3-2列举的数字与字符串之间的转换函数中常用的是num2str和str2num。这两个函数在MATLAB的图形用户界面编程中应用较多。【例3-12】 num2str和str2num函数用法实例。 a[1 2;3 4] % 创建一个字符串数组a 1 23 4 bstr2num(a) % 将字符串转换为数值形式b 1 23 4 cstr2num(12i) % 将字符串转换为数值形式c 1.0000 2.0000i dstr2num(1 2i) % 将字符串转换为数值形式d 1.0000 0.0000i 0.0000 2.0000ienum2str(rand(3,3),6) % 将数值转换为字符串形式e 0.814724 0.913376 0.2784980.905792 0.632359 0.5468820.126987 0.0975404 0.957507 whosName Size Bytes Class Attributesa 2x3 12 charb 2x2 32 doublec 1x1 16 double complexd 1x2 32 double complexe 3x35 210 char本例中转换生成变量c和d时得到了不同的结果主要原因是在变量d中数字 “1”和字符“2i”之间存在空格而加号“”和数字“2”之间没有空格所以转换的结果与生成变量c时不同创建变量c的时候在数字“1”、加号“”和数字“2”之间都存在空格。为了避免出现上述问题可以使用str2double函数但是该函数仅能转换标量不能转换矩阵或者数组。使用num2str函数将数字转换为字符串时可以指定字符串所表示的有效数字位数详细信息可以查阅MATLAB的help文档。3.5 字符串应用函数小结MATLAB主要以矩阵计算闻名于世除此以外该软件在字符串处理方面也提供了一系列非常强大的函数。表3-4对常用字符串函数进行了分类小结。表3-4 字符串函数函 数说 明字符串创建函数str由单引号(英文状态)创建字符串blanks创建空格字符串sprintf将格式化数据写入字符串strcat字符串组合strvcat竖直方向字符串组合字符串修改函数deblank删除尾部空格lower将所有字符小写sort将所有元素升序或降序排列strjust字符串对齐strrep字符串替换strtrim删除开始和尾部的泛空格符upper将所有字符大写字符串的读取和操作eval将一个字符串作为MATLAB命令执行sscanf格式读入字符串续表函 数说 明字符串查找替换函数findstr查找子串strcmp字符串比较strcmpi字符串比较忽略大小写strmatch查找符合要求的行strncmp比较字符串的前N个字符strncmpi比较字符串的前N个字符忽略大小写strtok查找某个字符最先出现的位置