MATLAB 字符串
MATLAB创建字符串
在MATLAB中创建字符串非常简单。例如,在命令提示符中输入以下内容:
zifuchuan="我是字符串"
输出结果:
zifuchuan="我是字符串"
MATLAB将所有变量都视为数组(参考MATLAB数组),而字符串则视为字符数组。使用whos命令(参考MATLAB 命令)检查上面创建的变量:
whos
Name Size Bytes Class Attributes
zifuchuan 1x1 158 string
可以使用uint8或uint16等数字转换函数将字符串中的字符转换为它们的数字编码。char函数将数字编码转换回字符。这里注意:不支持中文,只能转化英文字符串。
实例
my_string = 'Tutorial''s Point'; %注意这里引号嵌套时的使用
str_ascii = uint8(my_string) % 8-bit ascii values
str_back_to_char= char(str_ascii)
str_16bit = uint16(my_string) % 16-bit ascii values
str_back_to_char = char(str_16bit)
结果:
str_ascii =
84 117 116 111 114 105 97 108 39 115 32 80 111 105 110 116
str_back_to_char = Tutorial's Point
str_16bit =
84 117 116 111 114 105 97 108 39 115 32 80 111 105 110 116
str_back_to_char = Tutorial's Point
矩形字符数组
以上所讨论的字符串都是一维字符数组;然而,实际运用中需要存储远不止如此,而需要在程序中存储更多维度的文本数据。而这是通过创建矩形字符数组实现的。
创建矩形字符数组
创建矩形字符数组的最简单方法是根据需要将两个或多个一维字符数组(垂直或水平)连接起来。
垂直组合字符串数组的方法有以下两种:
- 使用MATLAB连接操作符[]并使用分号(;)分隔每一行。请注意,在此方法中,每行必须包含相同数量的字符。对于不同长度的字符串,应该根据需要用空格填充。
- 使用char函数(参考本文后文或MATLAB 数据类型)。如果字符串的长度不同,则char会对较短的字符串在结尾填充空格,以便每行具有相同数量的字符。
垂直组合实例
doc_profile = ['Zara Ali '; ...
'Sr. Surgeon '; ...
'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
'RN Tagore Cardiology Research Center')
输出结果:
doc_profile =
Zara Ali
Sr. Surgeon
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali
Sr. Surgeon
RN Tagore Cardiology Research Center
该列子演示用 []+;方法和char()函数方法实现了同样的效果:将字符串数组垂向链接。
水平组合字符串数组同样有两种方法:
- 使用MATLAB连接操作符[],并用逗号或空格分隔输入字符串。此方法保留输入数组中的任何尾随空格。
- 使用字符串连接函数strcat()(参考后文函数表)。此方法删除输入中的尾随空格。
水平组合实例
name = 'Zara Ali ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)
输出结果:
profile = Zara Ali , Sr. Surgeon , R N Tagore Cardiology Research Center
profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center
该列子演示用 “[]+,“方法和stract()函数方法实现了同样的效果:将字符串数组水平链接。注意结果中空格是否被保留。
将字符串组合成单元格数组
从前面的讨论中可以看出,组合不同长度的字符串可能很麻烦:因为数组中的所有字符串必须具有相同的长度。而前面的方法是在字符串的末尾使用空格来平衡它们的长度。
但是,组合字符串更有效的方法是将结果数组转换为单元格数组。
MATLAB单元数组可以在一个数组中保存不同大小和类型的数据。单元格数组提供了更灵活的方式来存储长度变化的字符串。
这里用到cellstr()函数,其作用是:将字符数组转换为字符串的单元格数组 。
举例
name = 'Zara Ali ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
结果:
{
[1,1] = Zara Ali
[2,1] = Sr. Surgeon
[3,1] = R N Tagore Cardiology Research Center
}
MATLAB的字符串函数
MATLAB具有大量创建、组合、解析、比较和操作字符串的字符串函数。以下是一些常用的函数:
函数 | 作用 |
---|---|
用于在字符数组中存储文本,组合字符数组等的函数 | |
blanks | 创建空白字符的字符串 |
cellstr | 从字符数组中创建字符串的单元格数组 |
char | 转换为字符数组(字符串) |
iscellstr | 确定输入是否为字符串的单元格数组 |
ischar | 确定是否为字符数组 |
sprintf | 将数据格式化为字符串 |
strcat | 横向连接字符串 |
strjoin | 将单元格数组中的字符串连接为单个字符串 |
用于标识字符串的各个部分、查找和替换子字符串的函数 | |
ischar | 确定是否为字符数组 |
isletter | 确定是否为字母数组元素 |
isspace | 确定数组元素是否为空格字符 |
isstrprop | 确定字符串是否属于指定类别 |
sscanf | 从字符串中读取格式化数据 |
strfind | 在一个字符串中找到另一个字符串 |
strrep | 查找和替换子字符串 |
strsplit | 在指定的分隔符处分隔字符串 |
strtok | 字符串的选定部分 |
validatestring | 检查文本字符串的有效性 |
symvar | 确定表达式中的符号变量 |
regexp | 匹配正则表达式(区分大小写);参考:MATLAB正则表达式 |
regexpi | 匹配正则表达式(大小写不敏感) |
regexprep | 使用正则表达式替换字符串 |
regexptranslate | 将字符串转换为正则表达式 |
用于字符串比较的函数 | |
strcmp | 比较字符串(区分大小写) |
strcmpi | 比较字符串(不区分大小写) |
strncmp | 比较字符串的前n个字符(区分大小写) |
strncmpi | 比较字符串的前n个字符(大小写不敏感) |
用于将字符串更改为大写或小写,创建或删除空白的函数 | |
deblank | 从字符串末尾去掉尾随空格 |
strtrim | 从字符串中删除开头和结尾的空白 |
lower | 转换字符串为小写 |
upper | 将字符串转换为大写 |
strjust | 证明字符数组 |
举例
下面的例子说明了上面提到的一些字符串函数
- 格式化字符串
A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)
%结果:
ans = 3141.592654
3141.59
+3141.59
3141.59
000003141.59
- 连接字符串
%c字符串的单元格数组
str_array = {'red','blue','green', 'yellow', 'orange'};
% 将单元格数组拼接为单个数组
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")
%结果:
str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange
- 查找和替换字符串
students = {'Zara Ali', 'Neha Bhatnagar', ...
'Monica Malik', 'Madhu Gautam', ...
'Madhu Sharma', 'Bhawna Sharma',...
'Nuha Ali', 'Reva Dutta', ...
'Sunaina Ali', 'Sofia Kabir'};
% strrep()函数查找并替换子字符串
new_student = strrep(students(8), 'Reva', 'Poulomi')
% 显示first names
first_names = strtok(students)
%结果:
new_student =
{
[1,1] = Poulomi Dutta
}
first_names =
{
[1,1] = Zara
[1,2] = Neha
[1,3] = Monica
[1,4] = Madhu
[1,5] = Madhu
[1,6] = Bhawna
[1,7] = Nuha
[1,8] = Reva
[1,9] = Sunaina
[1,10] = Sofia
}
- 字符串比较
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 字符串 ” comments 0