006 字符串.docx
- 文档编号:4700637
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:9
- 大小:33.30KB
006 字符串.docx
《006 字符串.docx》由会员分享,可在线阅读,更多相关《006 字符串.docx(9页珍藏版)》请在冰豆网上搜索。
006字符串
006.字符串
字母、数字、特殊符号都是字符;一串连续的字符就是字符串。
一般认为字符串是由空格和多个字符构成,记为
str=’a1a2…an’(n≥0)
ai可以是字母、数字、特殊符号、空格,每个字符占1位存放成一个行向量(1×n矩阵),从而可以通过下标访问字符串的元素。
多个字符串也可以构成字符矩阵,但必须长度相同。
一、字符串的创建
1.将字符串的字符放在一组英文单引号中间即可,例如
str1='We''regoingtostudyMatlab!
'
%必须英文状态下的单引号,单引号元素用两个单引号
l=length(str1)%l返回列数,即字符串包含字符的个数
zhstr1='中文字符串示例!
'%中文字符串,也是英文单引号
size(zhstr1)
运行结果:
str1=We'regoingtostudyMatlab!
l=28
zhstr1=中文字符串示例!
ans=18
2.用元胞数组存放复杂字符串,或cellstr()函数
C1={'Matlab2010bincludesdatatypes:
';
'Doublearray';
'Characterarray';
'andsoon'}
class(C1)%返回C1的数据类型
size(C1)
C2=char('Matlab2010bincludesdatatypes:
',...
'Doublearray',...
'Characterarray',...
'andsoon')
class(C2)
size(C2)
C3=cellstr(C2);%同C1
运行结果:
C1='Matlab2010bincludesdatatypes:
'
'Doublearray'
'Characterarray'
'andsoon'
ans=cell
ans=41
C2=Matlab2010bincludesdatatypes:
Doublearray
Characterarray
andsoon
ans=char
ans=433
注:
这里C1也可以用strvcat(str1,str2,…)实现类似的存储效果,见下文【字符串的连接】。
二、字符串的访问和操作
字符串是以行向量形式存储的,可通过下标访问。
1.替换字符串中的元素
str1='We''regoingtostudyMatlab!
';
str1(16:
20)='learn'
%将study替换为learn,注意study是从第16个位置开始的
运行结果:
str1=We'regoingtolearnMatlab!
2.取出字符串的子串
str1='We''regoingtostudyMatlab!
';
str2=str1(16:
20)
运行结果:
str2=learn
3.字符串顺序的倒排
str1='We''regoingtostudyMatlab!
';
str3=str1(end:
-1:
1)
运行结果:
str3=!
baltaMnraelotgnioger'eW
4.字符串字符的ASCII值与字符相互转换
字符串的元素存放的是字符的ASCII码值,显示在屏幕上的是字符本身。
从字符到ASCII码:
double()
从ASCII码到字符:
char()
str1='We''regoingtostudyMatlab!
';
ustr1=double(s1)
str4=char(us1)
zhstr1='中文字符串示例!
';
double(zhstr1)
运行结果:
ustr1=
Columns1through15
8710139114101321031111051101033211611132
Columns16through28
10810197114110327797116108979833
str4=We'regoingtolearnMatlab!
ans=
2001325991233833152620018310342036365281
5.字符串英文字母转换大小写
str1='We''regoingtostudyMatlab!
';
upper(str1)%全变为大写
lower(str1)%全变为小写
运行结果:
ans=WE'REGOINGTOLEARNMATLAB!
ans=we'regoingtolearnmatlab!
6.字符串的连接
strcat(str1,str2,…)——将字符串str1,str2,…连接合并为一个长字符串;
strvcat(str1,str2,…)——将字符串str1,str2,…连接成字符串向量(n×1的字符串矩阵,或n×mi字符矩阵);
str1='abcdefg';
str2='hijklmnopq';
str3=strcat(str1,str2)%将两个字符串合并为一个长字符串
str4=strvcat(str1,str2)%将两个字符串连接成字符串向量
whosstr3%返回str3的结构形式
whosstr4%2x1的字符串矩阵
运行结果:
str3=abcdefghijklmnopq
str4=abcdefg
hijklmnopq
NameSizeBytesClassAttributes
str31x1428char
NameSizeBytesClassAttributes
str42x728char
7.字符串的比较
strcmp(str1,str2)——str1与str2相等返回1,否则返回0(区分大小写);
strcmpi(str1,str2)——str1与str2相等返回1,否则返回0(不区分大小写);
strncmp(str1,str2,n)——比较str1与str2前n个字符是否相等(区分大小写)
strncmpi(str1,str2,n)——比较str1与str2前n个字符是否相等(不区分大小写)
strcmp(str1,str2)
strcmpi('abCD','abcd')
strncmp('Abcde',str3,5)
strncmpi('Abcde',str3,5)
运行结果:
ans=0
ans=1
ans=0
ans=1
8.字符串的查找与替换
findstr(str1,str2)——在较长字符串中查找较短字符串出现的各个位置(str1,str2谁先谁后都没关系);
strfind(str1,key)——在字符串str1中查找字符串key出现的位置;
strmatch(key,strs)——检查多行的字符串strs,以列向量形式返回各行以字符串key开始的各个行号;
strrep(str1,str2,str3)——把str1中含有str2位置用str3替换;
str='Findthestartingindicesoftheshorterstring.';
findstr(str,'the')
findstr('the',str)
strfind(str,'the')
strfind('the',str)
strmatch('hij',str4)%字符串str4第2行是以’hij’开始的
strrep(str,'the','a')
运行结果:
ans=630
ans=630
ans=630
ans=[]
ans=2
ans=Findastartingindicesofashorterstring.
9.数值矩阵与字符串转换
num2str(A)——数值矩阵转换为字符串向量(字符矩阵);
str2num(str)——字符串向量(字符矩阵)转换为数值矩阵;
mat2str(A)——将数值矩阵A的表达式转换为字符串“[”“]”“;”等都保留;
int2str(A)——整数矩阵转换为字符串向量(字符矩阵)。
A=[1,2,3;4,5,6;77,88,99]
whosA
str=num2str(A)
whosstr
num=str2num(str);%num等于A
str1=mat2str(A)
whosstr1
str2=int2str(A);%其值等于前面的str,
%若A不是整数矩阵先四舍五入为整数矩阵
运行结果:
A=123
456
778899
NameSizeBytesClassAttributes
A3x372double
str=123
456
778899
NameSizeBytesClassAttributes
str3x1060char
str1=[123;456;778899]
NameSizeBytesClassAttributes
str11x2244char
10.其他函数
blanks(n)——返回n个空格组成的字符串;
deblank(str)——删除字符串末尾的空格;
strtrim(str)——删除字符串开头、结尾的空格、制表符、换行符;
isspace(str)——返回和str同样大小的向量,空格、制表符、换行符的位置是1,其他位置是0;
lasterr——返回上一个错误信息的字符串。
三、字符串的应用
1.eval()函数——将括号内的字符串视为执行代码并运行
例如,eval('y=sin(pi/2)')和y=sin(pi/2)等价
运行结果都是:
y=1
Eval()函数多在循环中搭配num2str()函数一起使用,可以对多个名字有规则的变量或文件进行操作,例如,
fork=1:
3;
eval(['y'num2str(k)'='num2str(k^2)])%实现yk=k^2
end
D={'odedemo';'sunspots';'fitdemo'};%三个m文件名
n=input('Selectademonumber:
');
%提示输入要选择执行的某个m文件,比如输入2
eval(D{n})%运行sunspots.m
运行结果:
y1=1
y2=4
y3=9
运行Matlab自带的sunspots.m文件,输出结果是一个图(略)
2.用字符串命令控制格式化输出
例,fprintf,sprintf,sscanf用法
a=rand(2,2)%生成2×2随机矩阵
ss=sprintf('%.10e\n',a)%按10位科学计数法输出,
%每输一个换行,注意:
ss是字符矩阵
fprintf('%.4g\n',a)%按4位数输出
sscanf(ss,'%f',[2,2])%按浮点格式转换成2×2数值矩阵
运行结果:
a=0.81470.1270
0.90580.9134
ss=8.1472368639e-001
9.0579193708e-001
1.2698681629e-001
9.1337585614e-001
ans=0.8147
0.9058
0.127
0.9134
ans=0.81470.1270
0.90580.9134
3.用字符串给图形标记文字说明
a=2;
w=3;
t=0:
0.01:
10;
y=exp(-a*t).*sin(w*t);
[y_max,i_max]=max(y);%找出y的最大值元素位置
t_text=['t=',num2str(t(i_max))];%生成最大值点横坐标字符串
y_text=['y=',num2str(y_max)];%生成最大值点纵坐标字符串
max_text=char('maximum',t_text,y_text);
tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];
%生成标记最大值点的字符串
plot(t,zeros(size(t)),'k')%画纵坐标为0的基准线
holdon%保持已绘制图形不被清除
plot(t,y,'b')%用蓝色线画函数y(t)
plot(t(i_max),y_max,'r.','MarkerSize',20)
%用大红点标记最大值点
text(t(i_max)+0.3,y_max+0.05,max_text)
%显示最大值点的数值
title(tit)%标记图名
xlabel('t')%标记横坐标名
ylabel('y')%标记纵坐标名
holdoff%清除原来的图
运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 006 字符串