字符串又被称为字符数组,由多个字符连接而成。在MATLAB中,字符串一般用单引号('')括起来。[大谦MATLAB,dqmatlab点com]
创建字符串
把字符放到单引号中可以指定字符数据。
【例2-32】创建一个15的字符串country。
country = 'China';
在命令窗口中输入whos命令,输出显示:
Name Size Bytes Class
country 1x5 10 char
从以上结果可以看出,在内存中,每个字符占两个字节。
下面使用class函数和ischar函数测试country的数据类型,结果显示它是一个字符串。
class(country)
ans =
char
ischar(country)
ans =
1
创建二维字符串
在创建一个二维字符串时,应确定每行具有相同的长度。
【例2-33】创建二维字符串。
如下的两个字符串都有5个字符,可以用它们组合成二维字符串。
name = ['Li Yi'; 'Hu Xu']
name =
Li Yi
Hu Xu
在根据不同长度的字符串创建字符串时,在短的字符串后面用空格补齐长度,使所有字符串的长度都相同。如:
name = ['Liu Ying'; 'Hu Xu '];
用char函数创建字符串数组更简单,char函数自动以最长的输入字符串的长度为标准,进行空格补齐操作。
【例2-34】用char函数创建字符串数组。
在命令窗口中输入:
name = char('Liu Ying','Hu Xu')
name =
Liu Ying
Hu Xu
【例2-35】从数组中提取字符串时,用deblank函数删除后面的空格。
在命令窗口中输入:
trimname = deblank(name(2,:))
trimname =
Hu Xu
size(trimname)
ans =
1 5
类型转换
【例2-36】用char函数把单元数组转换为标准字符串数组。
在命令窗口中输入:
celldata={'Sun junfang','NewStudent','Beijing'};
strings = char(celldata)
strings =
Sun junfang
NewStudent
Beijing
length(strings(3,:))
ans =
11
【例2-37】str2double函数把一个字符串单元数组转换为字符串表示的双精度值。
在命令窗口中输入:
c = {'37.294e-1'; '-58.375'; '13.796'};
d = str2double(c)
d =
3.7294
-58.3750
13.7960
whos
Name Size Bytes Class
c 3x1 380 cell
d 3x1 24 double
Grand total is 28 elements using 248 bytes
【例2-38】int2str函数将整型数据转换为字符串型数据。
在命令窗口中输入:
x=2003;
y = int2str(x);
size(y)
ans =
1 4
可见,int2str函数将标量x转换成了一个包含字符串“2003”的14的矢量。
【例2-39】num2str函数对输出字符串的格式提供了更多控制,该函数的第2个变量是可选的,它用于设置输出字符串的位数,或指定一个实际的格式。
在命令窗口中输入:
p = num2str(pi,6)
p =
3.14159
mat2str函数可以将数组转换为字符串。
【例2-40】创建一个23的数组A。
A = [1 2 3; 4 5 6]
A =
1 2 3
4 5 6
【例2-41】mat2str函数将返回一个包含文本的字符串,在命令行中输入该文本,用于创建矩阵A。
在命令窗口中输入:
B = mat2str(A)
B =
[1 2 3; 4 5 6]
比较字符串
【例2-42】用strcmp函数比较字符串。
在命令窗口中输入:
str1 = 'hello';
str2 = 'help';
strcmp(str1,str2)
ans =
0
因为str1和str2不相等,所以调用strcmp函数时返回0(false)。
使用strncmp函数,可以比较字符串的前n+1个字符,如:
C = strncmp(str1,str2,2)
C =
1
因为“hello”和“help”的前三个字符相同,所以调用strncmp函数后结果返回1。
【例2-43】对于下面这些字符串结构数组,可以使用一些函数将一个单元一个单元地进行比较。
A = {'book';'pen';'rule'};
B = {'pencil';'pen';'pencilbox'};
下面用strcmp函数进行比较:
strcmp(A,B)
ans =
0
1
0
strncmp(A,B,1)
ans =
0
1
0
对于字符串,可以使用MATLAB的关系运算符进行比较。
【例2-44】下面用(==)确定两个字符串中的相同字符。
A = 'face';
B = 'cake';
A == B
ans =
0 1 0 1
所有关系运算符(>, >=, <, <=, ==, !=)比较对应字符的值。
聚合字符串
字符串通常可以由更小的元素聚合而成。通用的两种聚合方法是使用MATLAB聚合运算符([])或sprintf函数。
【例2-45】下面的第二行和第三行演示了这两种方法,它们会给出相同的结果:
num_chars = 28;
s = ['字符个数为:' int2str(num_chars) ]
s = sprintf('有 %d 个字符\n', num_chars)
【例2-46】用strcat函数也可以把两个或更多字符串组合在一起。
在命令窗口中输入:
country = 'China';
province= 'SiChuan';
strcat(country,',',province)
ans =
China,SiChuan
注意:在用聚合方法创建字符串时,用sprintf函数比使用[ ]好,因为更好读,特别是在组成复杂表达式的时候。该函数对输出格式可以有更多控制,而且一般运行速度更快。也可以用strcat函数聚合字符串,但对于简单的聚合,使用sprintf和[ ]运行速度更快。
字符分类
有两个函数可以对字符串中的字符进行分类:
isletter函数确定字符是否为字母;
isspace函数确定字符是否为空区(空格、空表间隔或空行)。
【例2-47】使用isletter函数创建一个名为mystring的字符串。
mystring = 'Room 401';
A = isletter(mystring)
A =
1 1 1 1 0 0 0 0
前四个字符是字母,所以返回值为1。
搜索和替换
MATLAB中提供了几个用于字符串的搜索和替换的函数。
【例2-48】使用strrep和findstr函数时对字符串进行操作。
对于字符串label:
label = 'Sample 1, ';
下面使用strrep函数进行标准的搜索和替代操作,使用strrep函数把“04/28”改为“04/30”。
newlabel = strrep(label,'28','30')
newlabel =
Sample 1,
下面使用findstr函数把子字符串的起始位置返回到一个更长的字符串中。
position = findstr('amp',label)
position =
2
'amp'字符串在label字符串中出现的起始位置为label字符串中第2个字符的位置。
strtok函数在输入字符串中第一次发现间隔符时返回间隔符前面的字符,可用该函数把句子分离成单词。
【例2-49】strmatch函数在字符串或字符串单元数组的整个行中进行查找,看有没有以给定字符序列打头的字符串,它返回以该字符串开头的行的行号。
在命令窗口中输入:
maxstrings = strvcat('max','minimax','maximum')
maxstrings =
max
minimax
maximum
strmatch('max',maxstrings)
ans =
1
3
因为在maxstrings字符串单元数组中,第1行和第3行的字符串以max打头,所以用strmatch函数得到的返回值为1和3。