字符串

字符串又被称为字符数组,由多个字符连接而成。在MATLAB中,字符串一般用单引号('')括起来。[大谦MATLAB,dqmatlab点com]

创建字符串

把字符放到单引号中可以指定字符数据。

【例2-32】创建一个15的字符串country。

code.matlab
country = 'China';

在命令窗口中输入whos命令,输出显示:

code.matlab
Name       Size         Bytes    Class
country      1x5           10     char

从以上结果可以看出,在内存中,每个字符占两个字节。

下面使用class函数和ischar函数测试country的数据类型,结果显示它是一个字符串。

code.matlab
class(country)
ans =
   char
ischar(country)
ans =
1

创建二维字符串

在创建一个二维字符串时,应确定每行具有相同的长度。

【例2-33】创建二维字符串。

如下的两个字符串都有5个字符,可以用它们组合成二维字符串。

code.matlab
name = ['Li Yi'; 'Hu Xu']
name =
   Li Yi
   Hu Xu

在根据不同长度的字符串创建字符串时,在短的字符串后面用空格补齐长度,使所有字符串的长度都相同。如:

code.matlab
name = ['Liu Ying'; 'Hu Xu   '];

用char函数创建字符串数组更简单,char函数自动以最长的输入字符串的长度为标准,进行空格补齐操作。

【例2-34】用char函数创建字符串数组。

在命令窗口中输入:

code.matlab
name = char('Liu Ying','Hu Xu')
name =
   Liu Ying
   Hu Xu

【例2-35】从数组中提取字符串时,用deblank函数删除后面的空格。

在命令窗口中输入:

code.matlab
trimname = deblank(name(2,:))
trimname =
   Hu Xu
size(trimname)
ans =
1   5

类型转换

【例2-36】用char函数把单元数组转换为标准字符串数组。

在命令窗口中输入:

code.matlab
celldata={'Sun junfang','NewStudent','Beijing'};
strings = char(celldata)
strings =
   Sun junfang
   NewStudent
   Beijing
length(strings(3,:))
ans =
    11

【例2-37】str2double函数把一个字符串单元数组转换为字符串表示的双精度值。

在命令窗口中输入:

code.matlab
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函数将整型数据转换为字符串型数据。

在命令窗口中输入:

code.matlab
x=2003;
y = int2str(x);
size(y)
ans =
    1     4

可见,int2str函数将标量x转换成了一个包含字符串“2003”的14的矢量。

【例2-39】num2str函数对输出字符串的格式提供了更多控制,该函数的第2个变量是可选的,它用于设置输出字符串的位数,或指定一个实际的格式。

在命令窗口中输入:

code.matlab
p = num2str(pi,6)
p =
3.14159

mat2str函数可以将数组转换为字符串。

【例2-40】创建一个23的数组A。

code.matlab
A = [1 2 3; 4 5 6]
A =
    1     2     3
    4     5     6

【例2-41】mat2str函数将返回一个包含文本的字符串,在命令行中输入该文本,用于创建矩阵A。

在命令窗口中输入:

code.matlab
B = mat2str(A)
B =
   [1 2 3; 4 5 6]

比较字符串

【例2-42】用strcmp函数比较字符串。

在命令窗口中输入:

code.matlab
str1 = 'hello';
str2 = 'help';
strcmp(str1,str2)
ans =
0

因为str1和str2不相等,所以调用strcmp函数时返回0(false)。

使用strncmp函数,可以比较字符串的前n+1个字符,如:

code.matlab
C = strncmp(str1,str2,2)
C =
    1

因为“hello”和“help”的前三个字符相同,所以调用strncmp函数后结果返回1。

【例2-43】对于下面这些字符串结构数组,可以使用一些函数将一个单元一个单元地进行比较。

code.matlab
A = {'book';'pen';'rule'};
B = {'pencil';'pen';'pencilbox'};

下面用strcmp函数进行比较:

code.matlab
strcmp(A,B)
ans =
    0
    1
    0
strncmp(A,B,1)
ans =
    0
    1
0

对于字符串,可以使用MATLAB的关系运算符进行比较。

【例2-44】下面用(==)确定两个字符串中的相同字符。

code.matlab
A = 'face';
B = 'cake';
A == B
ans =
    0   1   0   1

所有关系运算符(>, >=, <, <=, ==, !=)比较对应字符的值。

聚合字符串

字符串通常可以由更小的元素聚合而成。通用的两种聚合方法是使用MATLAB聚合运算符([])或sprintf函数。

【例2-45】下面的第二行和第三行演示了这两种方法,它们会给出相同的结果:

code.matlab
num_chars = 28;
s = ['字符个数为:' int2str(num_chars) ]
s = sprintf('有 %d 个字符\n', num_chars)

【例2-46】用strcat函数也可以把两个或更多字符串组合在一起。

在命令窗口中输入:

code.matlab
country = 'China';
province= 'SiChuan';
strcat(country,',',province)
ans =
   China,SiChuan

注意:在用聚合方法创建字符串时,用sprintf函数比使用[ ]好,因为更好读,特别是在组成复杂表达式的时候。该函数对输出格式可以有更多控制,而且一般运行速度更快。也可以用strcat函数聚合字符串,但对于简单的聚合,使用sprintf和[ ]运行速度更快。

字符分类

有两个函数可以对字符串中的字符进行分类:

isletter函数确定字符是否为字母;

isspace函数确定字符是否为空区(空格、空表间隔或空行)。

【例2-47】使用isletter函数创建一个名为mystring的字符串。

code.matlab
mystring = 'Room 401';
A = isletter(mystring)
A =
    1   1   1   1   0   0   0   0

前四个字符是字母,所以返回值为1。

搜索和替换

MATLAB中提供了几个用于字符串的搜索和替换的函数。

【例2-48】使用strrep和findstr函数时对字符串进行操作。

对于字符串label:

code.matlab
label = 'Sample 1, ';

下面使用strrep函数进行标准的搜索和替代操作,使用strrep函数把“04/28”改为“04/30”。

code.matlab
newlabel = strrep(label,'28','30')
newlabel =
   Sample 1,

下面使用findstr函数把子字符串的起始位置返回到一个更长的字符串中。

code.matlab
position = findstr('amp',label)
position =
    2

'amp'字符串在label字符串中出现的起始位置为label字符串中第2个字符的位置。

strtok函数在输入字符串中第一次发现间隔符时返回间隔符前面的字符,可用该函数把句子分离成单词。

【例2-49】strmatch函数在字符串或字符串单元数组的整个行中进行查找,看有没有以给定字符序列打头的字符串,它返回以该字符串开头的行的行号。

在命令窗口中输入:

code.matlab
maxstrings = strvcat('max','minimax','maximum')
maxstrings =
   max
   minimax
   maximum
strmatch('max',maxstrings)
ans =
1
3

因为在maxstrings字符串单元数组中,第1行和第3行的字符串以max打头,所以用strmatch函数得到的返回值为1和3。