在处理文件或图像的文件名时,不可避免要用字符串数组,当然,字符串的应用要广泛的多,比如界面绘图。Matlab也提供了相应的函数来处理字符串,对其进行转换、裁剪、连接、查找等功能。下面简单介绍下字符串的创建、表示、处理等内容。
字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。注意,该“单引号对”必须在英文状态下输入。这“单引号对”是MATLAB用来识别字符串变量所必须的。如:
>>a='This is an example.'
a =
This is an example.
>>msg = 'You''re right!' %创建带单引号的字符串
msg =
You're right!
字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。如:
>>b=a(1:4) % 提出一个子字符串
b =
This
ra=a(end:-1:1) % 字符串的倒排
ra =
.elpmaxe na si sihT
又如:
>>A='这是一个算例。';
>>B=size(A) % 符号数组 A 的“大小”
B =
1 7
>>C=A([5 6]) % 提出一个子字符串
C =
算例
字符串的存储是用ASCII码实现的。指令abs和double都可以用来获取串数组所对应的ASCII码数值数组。指令char可把ASCII码数组变为串数组。如
>>d=double(a)
d =
84 104 105 115 32 105 115 32 97 110 32 101 120 97 109 112 108 101 46
>>char(d)
ans =
This is an example.
对字符串ASCII码数组的操作:使字符串中字母全部大写
>>w=find(a>='a'&a<='z'); %找出串数组a中,小写字母的元素位置。
>>d(w)=d(w)-32; %大小写字母ASCII值差32用数值加法改变部分码值。
>>char(d) %把新的ASCII码翻成字符
ans =
THIS IS AN EXAMPLE.
>>Aa=[A,a]
Aa =
这是一个算例。This is an example.
>>name = strcat('Thomas',' R.',' Lee') %连接两个字符串,每个字符串最右边的空格被裁切
name =
Thomas R. Lee
>>D=strvcat('Hello','Yes','No','Goodbye') %利用串操作函数创建多行串数组, 连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格, 使与最长字符串相等,会忽略空字符串。
D =
Hello
Yes
No
Goodbye
strrep—进行字符串替换,区分大小写
strrep(str1,str2,str3) 它把str1中所有的str2字串用str3来替换
strfind(str,patten) %查找str中是否有pattern,返回出现位置,没有出现返回空数组
findstr(str1,str2) %查找str1和str2中,较短字符串在较长字符串中出现的位置,没有出现返回空数组
strmatch(patten,str) %检查patten是否和str最左侧部分一致
strtok(str,char) %返回str中由char指定的字符串前的部分和之后的部分,
命令 功能
blanks(n) 创建有n个空格组成的字符串
deblank(str) 裁切字符串的尾部空格
——————————————————————————————————————————
strcmp 比较两个字符串是否完全相等,是,返回真,否则,返回假
strncmp 比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
strcmpi 比较两个字符串是否完全相等,忽略字母大小写
strncmpi 比较两个字符串前n个字符是否相等,忽略字母大小写
——————————————————————————————————————————
strtrim 裁切字符串的开头和尾部的空格,制表,回车符
str2num 将数字字符串转换为数字
lower 将字符串中的字母转换成小写
upper 将字符串中的字母转换成大写
num2str 将数字转换为数字字符串
mat2str 将数组转换成字符串
int2str 把数值数组转换为整数数字组成的字符数组
——————————————————————————————————————————
sort 按照字符的ASCII值对字符串排序
——————————————————————————————————————————
isletter 检测字符串中每个字符时否属于英文字母
isspace 检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
isstrprop 检测字符每一个字符是否属于指定的范围.
>>g=’abcd’;
>> disp(g)
abcd
>>h=rand(2,2); %产生2*2随机阵
>>s=num2str(h) %把数值数组转换为串数组
s =
0.95013 0.60684
0.23114 0.48598
>>s_s=sprintf('%.10e/n',a) %10数位科学记述串,每写一个元素就换行。
s_s =
9.5012928515e-001
2.3113851357e-001
6.0684258354e-001
4.8598246871e-001
>>fprintf('% .5g //',a) %以5位数位最短形式显示。不能赋值用。
0.95013/0.23114/0.60684/0.48598/
>>s_sscan=sscanf(s_s,'%f',[3,2]) %浮点格式把串转换成3*2数值数组。
s_sscan =
0.9501 0.4860
0.2311 0
0.6068 0