将字符串组合成单元格数组
从前面的学习中,很明显,组合不同长度的字符串可能会很痛苦,因为数组中的所有字符串都必须具有相同的长度。在字符串的末尾使用了空格,使其长度相等。
然而,组合字符串的更有效的方法是将生成的数组转换为单元格数组。
MATLAB单元格数组可以在数组中保存不同大小和类型的数据。单元格数组提供了一种更灵活的方法来存储不同长度的字符串。
cellstr
函数将字符数组转换为字符串的单元格数组。
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
name = 'Zara Ali '; position = 'Sr. Surgeon '; worksAt = 'R N Tagore Cardiology Research Center'; profile = char(name, position, worksAt); profile = cellstr(profile); disp(profile)
运行该文件,显示以下结果:
'Zara Ali' 'Sr. Surgeon' 'R N Tagore Cardiology Research Center'
MATLAB中的字符串函数
MATLAB 提供了许多创建、组合、分析、比较和处理字符串的字符串函数。
下表是对 MATLAB 中字符串函数的简要说明:
函数 | 目的/作用 |
用于存储文本字符数组的函数,结合字符数组,等等 |
blanks | 创建空白字符的字符串 |
cellstr | 从字符数组中创建字符串单元格数组 |
char | 转换为字符数组 (字符串) |
iscellstr | 确定输入是否是字符串的单元格数组 |
ischar | 确定项是否为字符数组 |
sprintf | 将数据格式化为字符串 |
strcat | 水平串联字符串 |
strjoin | 将单元格数组中的字符串合并为单个字符串 |
识别字符串部分的函数,查找和替换子串 | |
ischar | 确定项是否为字符数组 |
isletter | 按照字母次序的数组元素 |
sspace | 数组元素是空格字符 |
isstrprop | 确定字符串是否为指定类别 |
sscanf | 从字符串读取格式化数据 |
strfind | 在另一个字符串中找到一个字符串 |
strrep | 查找和替换字符串 |
strsplit | 在指定分隔符处拆分字符串 |
strtok | 字符串的选定部分 |
validatestring | 检查文本字符串的有效性 |
symvar | 在表达式中确定符号变量 |
regexp | 匹配正则表达式 (区分大小写) |
regexpi | 匹配正则表达式 (不区分大小写) |
regexprep | 使用正则表达式替换字符串 |
regexptranslate | 将字符串转换为正则表达式 |
字符串比较函数 | |
strcmp | 比较字符串 (区分大小写) |
strcmpi | 比较字符串 (不区分大小写) |
strncmp | 比较字符串的前 n 个字符 (区分大小写) |
strncmpi | 比较字符串的前 n 个字符 (不区分大小写) |
改变字符串大写或小写,创建或删除空格的函数 | |
deblank | 从字符串末尾分隔尾随空格 |
strtrim | 从字符串中删除前导空格和尾随空格 |
lower | 将字符串转换为小写 |
upper | 将字符串转换为大写 |
strjust | 对齐字符数组 |
详细例子
接下来对上述的字符串的函数进行举例说明:
格式化字符串
在MATLAB中建立一个脚本文件,输入下述代码:
A = pi*1000*ones(1,5); sprintf(' %f %.2f %+.2f %12.2f %012.2f ', A)
运行该文件,显示以下结果:
ans = 3141.592654 3141.59 +3141.59 3141.59 000003141.59
加入字符串
在MATLAB中建立一个脚本文件,输入下述代码:
%cell array of strings str_array = {'red','blue','green', 'yellow', 'orange'}; % Join strings in cell array into single string str1 = strjoin(str_array, "-") str2 = strjoin(str_array, ",")
运行该文件,显示以下结果:
1.
查找和替换字符串
在MATLAB中建立一个脚本文件,并输入下述代码:
students = {'Zara Ali', 'Neha Bhatnagar', ... 'Monica Malik', 'Madhu Gautam', ... 'Madhu Sharma', 'Bhawna Sharma',... 'Nuha Ali', 'Reva Dutta', ... 'Sunaina Ali', 'Sofia Kabir'}; % The strrep function searches and replaces sub-string. new_student = strrep(students(8), 'Reva', 'Poulomi') % Display first names first_names = strtok(students)
运行该文件,显示以下结果:
new_student = 'Poulomi Dutta' first_names = Columns 1 through 6 'Zara' 'Neha' 'Monica' 'Madhu' 'Madhu' 'Bhawna' Columns 7 through 10 'Nuha' 'Reva' 'Sunaina' 'Sofia'
比较字符串
在MATLAB中建立一个脚本文件,输入下述代码:
str1 = 'This is test' str2 = 'This is text' if (strcmp(str1, str2)) sprintf('%s and %s are equal', str1, str2) else sprintf('%s and %s are not equal', str1, str2) end
运行该文件,显示以下结果:
str1 = This is test str2 = This is text ans = This is test and This is text are not equal
MATLAB函数
在MATLAB中,函数定义在单独的文件。函数和函数的文件名应该是相同的。
函数是一起执行任务的一组语句。
函数在自己的工作空间进行操作,被称为本地工作区,独立的工作区;在 MATLAB 命令提示符访问,这就是所谓的基础工作区的变量。
函数可以接受多个输入参数和可能返回多个输出参数。
函数语句的语法是:
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
详细例子
下述有个 mymax 函数,它需要五个数字作为参数并返回最大的数字。
建立函数文件,命名为 mymax.m 并输入下面的代码:
function max = mymax(n1, n2, n3, n4, n5) %This function calculates the maximum of the % five numbers given as input max = n1; if(n2 > max) max = n2; end if(n3 > max) max = n3; end if(n4 > max) max = n4; end if(n5 > max) max = n5; end
每个函数的第一行要以 function 关键字开始。它给出了函数的名称和参数的顺序。
在我们的例子中,mymax 函数有5个输入参数和一个输出参数。
注释行语句的功能后提供的帮助文本。这些线条打印,当输入:
help mymax
MATLAB执行上述语句,返回以下结果:
1. This function calculates the maximum of the 2. five numbers given as input
可以调用该函数:
mymax(34, 78, 89, 23, 11)
MATLAB执行上述语句,返回以下结果:
1. ans = 2. 89
MATLAB匿名函数
一个匿名的函数就像是在传统的编程语言,在一个单一的 MATLAB 语句定义一个内联函数。
它由一个单一的 MATLAB 表达式和任意数量的输入和输出参数。
在MATLAB命令行或在一个函数或脚本可以定义一个匿名函数。
这种方式,可以创建简单的函数,而不必为他们创建一个文件。
建立一个匿名函数表达式的语法如下:
f = @(arglist)expression
详细例子
在这个例子中,我们将编写一个匿名函数 power,这将需要两个数字作为输入并返回第二个数字到第一个数字次幂。
在MATLAB中建立一个脚本文件,并输入下述代码:
power = @(x, n) x.^n; result1 = power(7, 3) result2 = power(49, 0.5) result3 = power(10, -10) result4 = power (4.5, 1.5)
运行该文件时,显示结果:
result1 = 343 result2 = 7 result3 = 1.0000e-10 result4 = 9.5459
主要函数和子函数
在一个文件中,必须定义一个匿名函数以外的任何函数。每个函数的文件包含一个必需的主函数和首先出现的任何数量的可选子函数,在主要函数之后使用。
主要函数可以调用的文件,它定义之外,无论是从命令行或从其他函数,但子功能不能被称为命令行或其他函数,外面的函数文件。
子功能可见函数内的文件,它定义它们的主要函数和其他函数。
详细例子
我们写一个 quadratic 函数来计算一元二次方程的根。
该函数将需要三个输入端,二次系数,线性合作高效的和常数项,它会返回根。
函数文件 quadratic.m 将包含的主要 quadratic 函数和子函数 disc 来计算判别。
在MATLAB中建立一个函数文件 quadratic.m 并输入下述代码:
function [x1,x2] = quadratic(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficients of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
可以从命令提示符调用上述函数为:
quadratic(2,4,-4)
MATLAB执行上面的语句,返回以下结果:
ans = 0.7321
MATLAB嵌套函数
在这个机体内另一个函数,可以定义函数。这些被称为嵌套函数。
嵌套函数包含任何其他函数的任何或所有的组件。
嵌套函数被另一个函数的范围内定义他们共享访问包含函数的工作区。
嵌套函数的语法如下:
function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end
详细例子
我们重写前面例子的 quadratic 函数,但是,这一次的 disc 函数将是一个嵌套函数。
在MATLAB中建立一个函数文件 quadratic2.m,并输入下述代码:
function [x1,x2] = quadratic2(a,b,c) function disc % nested function d = sqrt(b^2 - 4*a*c); end % end of function disc disc; x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of function quadratic2
可以从命令提示符调用上面的函数为:
quadratic2(2,4,-4)
MATLAB执行上面的语句,返回以下结果:
ans = 0.7321
MATLAB私有函数
一个私有函数是一个主要的函数,是只看得见一组有限的其它函数。
如果不想公开的执行的一个函数,可以创建私有函数。
私有函数驻留特殊的名字私人的子文件夹中。
他们是可见的,只有在父文件夹的函数。
详细例子
重写 quadratic 函数。然而,这时计算的判别式 disc 函数,是一个私有函数。
在MATLAB中建立一个子文件夹命名为私人工作目录。它存储在以下函数文件 disc.m:
function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function
在工作目录,创建一个函数 quadratic3.m ,输入下述代码:
function [x1,x2] = quadratic3(a,b,c) %this function returns the roots of % a quadratic equation. % It takes 3 input arguments % which are the co-efficients of x2, x and the %constant term % It returns the roots d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end % end of quadratic3
可以从命令提示符调用上面的函数为:
quadratic3(2,4,-4)
MATLAB执行上面的语句,返回以下结果:
ans = 0.7321
MATLAB全局变量
全局变量可以由一个以上的函数共享。对于这一点,需要将变量声明为global ,就可以在所有的函数可使用。
如果想访问该变量。从基工作区,然后在命令行声明的变量。
全局声明必须出现在变量中。实际上是使用功能。这是一个很好的做法是使用大写字母为全局变量的名称,以区别于其他变量。
详细例子
创建一个函数文件名为 average.m ,输入下述代码:
function avg = average(nums) global TOTAL avg = sum(nums)/TOTAL; end
在MATLAB中建立一个脚本文件,输入下面的代码:
global TOTAL; TOTAL = 10; n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42]; av = average(n)
运行该文件,显示以下结果:
av = 35.5000