matlab字符串处理
%取子字符串,假设字符串存在ch里面
ch='abc'
kk=ch(2:end)
》bc
%声明字符串向量
A=['';'';'']
%利用冒号取字符串向量的第二行
A(2;:);
%******************上面是笔记********************
%******************下面是转载的******************
%字符串处理
a=' a';b='b b';c='cccc';m=''
%获取字符串长度
length(a)
%连接两个字符串,每个字符串最右边的空格被裁切
d=strcat(a,c)
length(d)
%连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格
%使与最长字符串相等,会忽略空字符串
e=strvcat(a,b,m)
size(e)
%char连接,空字符串会被空格填满
f=char(a,b,m)
size(f)
%strcmp
比较两个字符串是否完全相等,是,返回真,否则,返回假
%strncmp 比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
%strcmpi 比较两个字符串是否完全相等,忽略字母大小写
%strncmpi 比较两个字符串前n个字符是否相等,忽略字母大小写
%isletter
检测字符串中每个字符时否属于英文字母
%isspace 检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
%isstrprop 检测字符每一个字符是否属于指定的范围
a='d sdsdsd 15#';
b=isletter(a)
c=isspace(a)
%字符串替换和查找
%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指定的字符串前的部分和之后的部分,
mm='youqwelcome';
[mm1,mm2]=strtok(mm,'q')
% blanks(n)
创建有n个空格组成的字符串
% deblank(str) 裁切字符串的尾部空格
% strtrim(str) 裁切字符串的开头和尾部的空格,制表,回车符
% lower(str)
将字符串中的字母转换成小写
% upper(str) 将字符串中的字母转换成大写
%sort(str) 按照字符的ASCII值对字符串排序
%num2str 将数字转换为数字字符串
%str2num 将数字字符串转换为数字
%mat2str 将数组转换成字符串
%int2str 把数值数组转换为整数数字组成的字符数组
MATLAB提供了大量的字符串函数,包括列在表6.3当中的。
表6.3
字 符 串 函
数
eval_r(string)
作为一个MATLAB命令求字符串的值
eval_r(try,catch)
blanks(n)
返回一个n个零或空格的字符串
deblank
去掉字符串中后拖的空格
feval
求由字符串给定的函数值
findstr
从一个字符串内找出字符串
isletter
字母存在时返回真值
isspace
空格字符存在时返回真值
isstr
输入是一个字符串,返回真值
lasterr
返回上一个所产生MATLAB错误的字符串
strcmp
字符串相同,返回真值
strrep
用一个字符串替换另一个字符串
strtok
在一个字符串里找出第一个标记
列在上面的第一个函数eval给MATLAB提供宏的能力。其中,该函数提供了将用户创建的函数名传给其它函数能力,以便求值。它的应用例子包括:
» a=eval_r(' sqrt(2)
')
a =
1.4142
» eval_r(' a=sqrt(2)
')
a =
1.4142
上面的例子演示了函数eval。显然,它们不是计算2的平方根的最简单方法。当被求值的字符串是由子字符串连接而成,或将字符串传给一个函数以求值时,eval非常有用。说明这种用途例子本书的以后会提及。
如果字符串传递到eval不能被辨认,MATLAB提供下列语法:
» eval_r(' a=sqrtt(2) ','
a=[ ] ')
a =
[ ]
这里第二个参量被执行。由于第一个参量有误,即sqrtt不是一个有效的MATLAB函数。这种形式经常被描述为eval_r(try,catch)。
函数feval与eval类似,但在用法上有更多的限制。feval_r('
fun ',x)求由字符串' fun '给定的函数值,其输入参量是变量x。即feval_r(' fun
',x)等价于求fun(x)值。例如,
» a=feval_r(' sqrt '
,2)
a =
1.4142
函数eval,feval的基本用途限在用户创建的函数内。一般地,feval可求出有大量输入参量的函数值,例如,feval_r('
fun ', x, y, z)等价于求fun(x, y,
z)值。
列在上面表中的许多字符串函数提供了基本的字符串语法分析能力。例如,findstr返回一个在另一个字符串内字符串的起始下标值。
» b=' Peter Piper picked a
peck of pickled peppers ' ;
» findstr(b,' ') % find
space
ans =
6 12 19 21 26 29
37
» findstr(b,' p ') % find
the letter p
ans =
9 13 22 30 38 40
41
» find(b= = ' p ') % for
single character searches the find command works too
ans =
9 13 22 30 38 40
41
» findstr(b, ' cow ') %
find the word cow
ans =
[ ]
» findstr(b,' pick ') %
find the string pick
ans =
13 30
注意这个函数对大小写是敏感的,当不匹配时,返回空矩阵。findstr对字符串矩阵不起作用。
» strrep(b, ' p ', ' P ') %
capitalize all p ' s
ans =
Peter PiPer Picked a Peck
of Pickled PePPers
» strrep(b, ' Peter ', '
Pamela ') % change Peter to Pamela
ans =
Pamela Piper picked a peck
of pickled peppers
正如上面所看到的,strrep执行简单的字符串替代。strrep对字符串矩阵不起作用。
函数strtok找出由特定字符指定的字符串内的标记,空格是缺省限定字符。例如,
» disp(b)
Peter Piper picked a peck
of pickled peppers
» strtok(b) % find first
token in above string separated by whitespace
ans =
Peter
» [c, r]=strtok(b) % return
the remainder of the string array in r
c =
Peter
r =
Piper picked a peck of
pickled peppers
» [d,s]=strtok(r) %find the
next token by using the previous remainder
d =
Piper
s =
picked a peck of pickled
peppers
用空格作为限定符,strtok找出在数组中的单词。strtok对字符串矩阵不起作用。
» [d, s]=strtok(b, ' pP ')
%let delimiter be lower or upper case P
d =
eter
s =
Piper picked a peck of
pickled peppers
如果提供一个可选的字符串,它的字符是限定符。注意在标记里,不返回限定符,但返回所有限定符之前的字符。也就是,在上面的字符串d
= eter末端有一个空格。
MATLAB字符串数组的创建与运算
字符串数组主要用于可视化编程内容,如界面设计和图形绘制。
1.字符串变量的创建
字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。注意,该“单引号对”必须在英文状态下输入。这“单引号对”是MATLAB用来识别字符串变量所必须的。如:
>>a='This is an example.'
a =
This is an
example. >>msg = 'You''re right!'
%创建带单引号的字符串
msg =
You're
right!
2.字符串数组的标识
字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。如:
>>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 =
算例
3.字符串的ASCII码
字符串的存储是用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.
4.字符串数组的运算
>>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
5.
字符串替换和查找
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指定的字符串前的部分和之后的部分,
6.常用字符串操作函数
blanks(n)—创建有n个空格组成的字符串
deblank(str)—裁切字符串的尾部空格
strtrim(str)—裁切字符串的开头和尾部的空格,制表,回车符
lower(str)—将字符串中的字母转换成小写
upper(str)—将字符串中的字母转换成大写 sort(str)—按照字符的ASCII值对字符串排序
num2str—将数字转换为数字字符串
str2num—将数字字符串转换为数字
mat2str—将数组转换成字符串
int2str—把数值数组转换为整数数字组成的字符数组
7.其他字符串操作函数
strcmp—比较两个字符串是否完全相等,是,返回真,否则,返回假
strncmp—比较两个字符串前n个字符是否相等,是,返回真,否则,返回假
strcmpi—比较两个字符串是否完全相等,忽略字母大小写
strncmpi—比较两个字符串前n个字符是否相等,忽略字母大小写
isletter—检测字符串中每个字符时否属于英文字母
isspace—检测字符串中每个字符是否属于格式字符(空格,回车,制表,换行符等)
isstrprop—检测字符每一个字符是否属于指定的范围.
8.字符串的显示和打印
>>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)
数位科学记述串,每写一个元素就换行。
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
///
x = str2mat('36842',
'39751', '38453', '90307')
x =
36842
39751
38453
90307
>> x(1,:)
ans =
36842