- 在线时间
- 326 小时
- 最后登录
- 2019-9-18
- 注册时间
- 2014-8-5
- 听众数
- 36
- 收听数
- 9
- 能力
- 0 分
- 体力
- 4485 点
- 威望
- 0 点
- 阅读权限
- 60
- 积分
- 1854
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 996
- 主题
- 413
- 精华
- 0
- 分享
- 3
- 好友
- 98
升级   85.4% TA的每日心情 | 开心 2019-9-18 21:55 |
---|
签到天数: 258 天 [LV.8]以坛为家I
 群组: 2015国赛冲刺 群组: 2016美赛公益课程 群组: 国赛讨论 群组: 第三届数模基础实训 群组: Matlab讨论组 |
1.4 字符串函数
1.4.1 函数简介
在MATLAB程序设计中,在处理数据的输入与输出时,字符串函数是比较常用的。
表 字符串操作函数
函数名 调用格式 功能
strcat T=STRCAT(S1,S2,S3,..) 连接字符串
strvcat S=STRVCAT(T1,T2,T3,..) 垂直连接字符串
strcmp STRCMP(S1,S2) 比较字符串,S1与S2相同返回1,不同则返回0,区别大小写
strncmp STRNCMP(S1,S2,N) 比较2字符串的前N个字符,区别大小写
strcmpi STRCMPI(S1,S2) 比较字符串,忽略大小写
strncmpi STRNCMPI(S1,S2,N) Compare first N characters of strings ignoring case. 不区别大小写
findstr K = FINDSTR(S1,S2) 寻找较短的字符串在较长字符串中的位置索引
strjust T=STRJUST(S)
T= STRJUST(S,'right')
T= STRJUST(S,'center')
T= STRJUST(S,'left') 调整字符串
strmatch I = STRMATCH(STR,STRS) 在字符串矩阵STRS中寻找以STR开头的字符串
strrep S = STRREP(S1,S2,S3) 将S1中包含的字符串S2替换为S3,要区分大小写
strtok STRTOK(S)
[t,r]=STRTOK(S,D) 返回字符串中除去开始的空白串的第一个标记字符串
upper B = UPPER(A) 将字符串转换成大写
lower B = LOWER(A) 将字符串转换成小写
字符串与数值转换函数
函数名 调用格式 功能
num2str t=num2str(x)
t=num2str(x,n)
将数值转换成字符串
n表示转换精度
int2str s = int2str(x) 将整数转换成字符串
mat2str str=mat2str(mat) 将矩阵mat转换成可以计算的字符串
str2double x=str2double(s) 将字符串转换成双精度数
str2num x=str2num(s) 将字符串矩阵转换成数值矩阵
sprintf [s,errmsg]=sprintf(format,a,…) format是格式化字符串,a,..是矩阵参数,errmsg是可选的
sscanf [a,count,errmsg,nextindx]=sscanf(s,format,size)
Count,errmsg,nextindex,size是可选的输入、输出参数
Size指定所读的元素个数,若没有则整个字符串都读取
1.4.2 例子
例子1:
num2str(randn(2,2),3)
输出:
ans =
-0.433 0.125
-1.67 0.288
例子2:
mat=magic(3)
str=mat2str(mat)
matnew=eval(str)
输出:
mat =
8 1 6
3 5 7
4 9 2
str =
[8 1 6;3 5 7;4 9 2]
matnew =
8 1 6
3 5 7
4 9 2
其它函数:
char(x) - 将x中非负数转换成字符
double(x) - 将x转换成双精度类型数据
blanks(n) - 生成n个空格字符
deblank(s) - 删除s末尾的空格
eval(s) - 计算Matlab字符串s
字符测试:
ischar(s) - 属于字符则返回1,否则返回0
isletter(s) - 属于字母则返回1,否则返回0
isspace(s) - 属于空白字符则返回1,否则返回0.
文件操作函数
1.4.3 文件处理函数
matlab\iofun
格式化的文件 I/O函数
fgetl - 从文件中读取一行数据,不保留行结束符
fgets - 从文件中读取一行数据,保留行结束符
fprintf - 将格式化的数据写到文件
fscanf - 从文件中读取格式化的数据
input - 输入函数
textread - 从文件读取格式化的数据
字符串转换函数
sprintf - 将数据格式化成字符串
sscanf - 按照格式从字符串种读取数据
strread - 从文本字符串种读取格式化数据
文件打开、关闭函数
fopen - 打开文件
fclose - 关闭文件
二进制文件 I/O函数
fread - 从文件读取二进制数据.
fwrite - 将二进制数据写到文件中去
文件位置函数
feof - 测试是否到文件结尾
ferror - 查询文件错误状态
frewind - 将文件位置指示到文件开始
fseek - 设置文件位置指示器
ftell - 获得文件位置指示器
1.4.4 读取格式化文件例子
现有一个文本文件data.txt,其数据内容如下,每行有固定格式,均有5个数,
文件内容如下:
20020101 31 25 30 23
20020101 35 35 40 25
20020101 45 29 60 30
20020101 65 75 80 40
现要将该文件数据读入矩阵中,读取该文件的程序如下(flread.m)
fid=fopen('data.txt','rt');
if fid<0
sprintf('failure for reading file day.txt')
return
end
row=0;
while ~feof(fid)
str=fgets(fid);
row=row+1;
if row>1,
m(row, =str2num(str);
else
m=str2num(str);
end
end
fclose(fid);
输出:
说明:
由于是逐行读取,所以要判断是否读完,使用函数feof判断
fgets:读取一行的字符串
如果有些行在最后少了数据,则原来的程序会出错,出错行为下面的语句:
m(row, =str2num(str)
该行可改写为两行:
tmp=str2num(str);
m(row,1:length(tmp))=tmp
|
zan
|