本节我们学习如何在MATLAB中创建一个字符串。
例如:
代码语言:javascript复制my_string = '搬砖工程师domi'
MATLAB执行上述语句,返回以下结果:
代码语言:javascript复制my_string =
'搬砖工程师domi'
MATLAB 认为所有变量,数组和字符串被视为字符数组。
让我们使用命令检查上面创建的变量:
代码语言:javascript复制whos
MATLAB执行上面的语句,返回以下结果:
代码语言:javascript复制 Name Size Bytes Class Attributes
my_string 1x9 18 char
你可以使用数字转换函数,如 uint8 或 uint16 字符串中的字符转换成数字代码。
char 函数整数向量转换回字符
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
代码语言:javascript复制my_string = '搬砖工程师domi'
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)
运行该文件,显示以下结果:
代码语言:javascript复制my_string =
'搬砖工程师domi'
str_ascii =
1×9 uint8 行向量
255 255 255 255 255 100 111 109 105
str_back_to_char =
'ÿÿÿÿÿdomi'
str_16bit =
1×9 uint16 行向量
列 1 至 8
25644 30742 24037 31243 24072 100 111 109
列 9
105
str_back_to_char =
'搬砖工程师domi'
MATLAB矩形字符数组
目前为止我们已经讨论过的字符串的字符数组是一维,但是我们需要更立体的文本数据存储在我们的程序中。这是通过创建的矩形的字符数组。
建立一个矩形字符数组的最简单的方法是通过连接两个或两个以上的一维字符数组,无论是垂直或水平的要求。
您可以通过以下方式之一合并垂直字符串:
- 使用 MATLAB 连接运算符 [] 和分离每行一个分号(;)。请注意,在该方法中的每一行必须包含相同的字符数。不同长度的字符串,应该根据需要使用空格字符。
- 使用 char 函数。如果字符串长度不同和 char 补齐较短尾随空白,使每一行都有相同数量的字符的字符串。
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
代码语言:javascript复制doc_profile = ['Zara Ali '; ...
'Sr. Surgeon '; ...
'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
'RN Tagore Cardiology Research Center')
运行该文件,显示以下结果:
代码语言:javascript复制doc_profile =
Zara Ali
Sr. Surgeon
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali
Sr. Surgeon
RN Tagore Cardiology Research Center
采取下述方式之一横向合并字符串:
- 使用MATLAB串连运算,[],并用逗号或空格分隔输入字符串。这种方法保留任何尾随空格输入数组。
- 使用字符串连接函数 strcat。此方法删除尾随空格输入
详细例子
在MATLAB中建立一个脚本文件,并输入下述代码:
代码语言:javascript复制name = 'Zara Ali ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)
运行该文件,显示以下结果:
代码语言:javascript复制profile =
Zara Ali , Sr. Surgeon , R N Tagore Cardiology Research Center
profile =
Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center
结合成的字符串单元阵列
从前面的讨论,很显然,具有不同长度的字符串相结合,可能是一个痛苦作为在阵列中的所有字符串具有相同的长度。我们已经使用空格的字符串的结尾,其长度相等。
然而,有更有效的方式结合字符串转换成一个单元阵列的阵列。
MATLAB单元阵列可以容纳不同尺寸和类型的数据,在一个数组中。单元格阵列提供了一个更灵活的方式来存储不同长度的字符串。
cellstr 函数将字符数组转换成字符串单元阵列。
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
代码语言:javascript复制name = 'Zara Ali ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
运行该文件,显示以下结果:
代码语言:javascript复制'Zara Ali'
'Sr. Surgeon'
'R N Tagore Cardiology Research Center'
MATLAB中的字符串函数
MATLAB 提供了许多创建、组合、分析、比较和处理字符串的字符串函数。
下表是对 MATLAB 中字符串函数的简要说明:
函数 | 目的/作用 |
---|---|
用于存储文本字符数组的函数,结合字符数组,等等 | |
blanks | 创建空白字符的字符串 |
cellstr | 从字符数组中创建字符串单元格数组 |
char | 转换为字符数组 (字符串) |
iscellstr | 确定输入是否是字符串的单元格数组 |
ischar | 确定项是否为字符数组 |
sprintf | 将数据格式化为字符串 |
strcat | 水平串联字符串 |
strjoin | 将单元格数组中的字符串合并为单个字符串 |
识别字符串部分的函数,查找和替换子串 | |
ischar | 确定项是否为字符数组 |
isletter | 按照字母次序的数组元素 |
isspace | 数组元素是空格字符 |
isstrprop | 确定字符串是否为指定类别 |
sscanf | 从字符串读取格式化数据 |
strfind | 在另一个字符串中找到一个字符串 |
strrep | 查找和替换字符串 |
strsplit | 在指定分隔符处拆分字符串 |
strtok | 字符串的选定部分 |
validatestring | 检查文本字符串的有效性 |
symvar | 在表达式中确定符号变量 |
regexp | 匹配正则表达式 (区分大小写) |
regexpi | 匹配正则表达式 (不区分大小写) |
regexprep | 使用正则表达式替换字符串 |
regexptranslate | 将字符串转换为正则表达式 |
字符串比较函数 | |
strcmp | 比较字符串 (区分大小写) |
strcmpi | 比较字符串 (不区分大小写) |
strncmp | 比较字符串的前 n 个字符 (区分大小写) |
strncmpi | 比较字符串的前 n 个字符 (不区分大小写) |
改变字符串大写或小写,创建或删除空格的函数 | |
deblank | 从字符串末尾分隔尾随空格 |
strtrim | 从字符串中删除前导空格和尾随空格 |
lower | 将字符串转换为小写 |
upper | 将字符串转换为大写 |
strjust | 对齐字符数组 |
详细例子
接下来对上述的字符串的函数进行举例说明:
格式化字符串
在MATLAB中建立一个脚本文件,输入下述代码:
代码语言:javascript复制A = pi*1000*ones(1,5);
sprintf(' %f
%.2f
% .2f
.2f
2.2f
', A)
运行该文件,显示以下结果:
代码语言:javascript复制ans =
3141.592654
3141.59
3141.59
3141.59
000003141.59
加入字符串
在MATLAB中建立一个脚本文件,输入下述代码:
代码语言:javascript复制�ll 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)
运行该文件,显示以下结果:
代码语言:javascript复制str1 =
red blue green yellow orange
str2 =
red , blue , green , yellow , orange
查找和替换字符串
在MATLAB中建立一个脚本文件,并输入下述代码:
代码语言:javascript复制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)
运行该文件,显示以下结果:
代码语言:javascript复制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中建立一个脚本文件,输入下述代码:
代码语言:javascript复制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
运行该文件,显示以下结果:
代码语言:javascript复制str1 =
This is test
str2 =
This is text
ans =
This is test and This is text are not equal