字符与字符串
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function out = capalize(in) %capalize: Captalize each word of a given sentence % Usage: out = captalize(in) % Multiple spaces are reduced to a single space too. if nargin<1, selfdemo; return; end if isempty(in), out = ''; return; end i = 1; [token, rem] = strtok(in); while ~isempty(token) extracted{i} = token; i = i+1; [token, rem] = strtok(rem); end for i = 1:length(extracted), string = extracted{i}; new_string = [upper(string(1)), string(2:end)]; extracted{i} = new_string; end out = extracted{1}; for i = 2:length(extracted), out = [out, ' ', extracted{i}]; end % ====== Self demo function selfdemo input = 'this is A test for Me too'; output = feval(mfilename, input); fprintf('input = %s\n', input); fprintf('output = %s\n', output);
字符串数组的转换
mat2str 指令可将矩阵转换为字符串,此字符 串若再经由 eval 指令的使用,可再变回原先 的矩阵 范例10-32: string405.m
A = [1 2 1; 3 5 6 ]; B = mat2str(A) A2 = eval(B) isequal(A, A2) % 将矩阵 A 转成字符串 B % 再将字符串 B 转回矩阵 A2 % 测试 A 和 A2 是否相等
x3 x4 x5 x6
% 清除所有变量 eval(['x', int2str(i) , '= magic(' , int2str(i) , ') ; ']);
Size
3x3 4x4 5x5 6x6
Bytes Class
72 128 200 288 double array double array double array double array
字符与字符串的基本概念-eval
eval 指令: 直接“执行”某一特定字符串,其效果就如同直接在 MATLAB 指令窗 口内输入此一特定字符串 eval 指令特别适用于在 for - loop 内自动产生有规律的变量名称 范例10-11: string111.m
clear all for i = 3:6 end whos x* Name
chinese = '今日事,今日毕'; out1 = class(chinese)% out1 的值是 “char”,代表chinese 是字符串变量 x = chinese+1; out2 = ischar(x) % out2 的值是 0,代表 x 不是一个字符串变量
字符串变量所占用的空间是同长度双精 准(Double)数值变数的四分之一
parsed = ee cs econ stat me
字符串的结合
MATLAB 在读入中文字符串时,将每一个中文字的 2byte 分开来读,造成两个中文字变成四个字符串元素 xlate 指令: 将中文的 2-byte 「结合」在一起 范例10-27: string309.m
fid = fopen('tbig5.txt'); line = fgetl(fid); fclose(fid); line2 = xlate(line) leng = length(line2) % 读取一列档案内容 % 使用 xlate 将被猜开的中文结合在一起 % 显示字符串长度
str3 = I like MATLAB, JavaScript, and Perl!
字符与字符串的基本概念
欲输入含有单引号的字符串,可重复单引号的 使用 若要计算字符串变量的长度(即组成字符的个 数),可用 length 指令 范例10-4: string104.m
sentence = 'I''ve got a date!'; length(sentence) % 计算字符串变量 sentence 的长度
departments = char('ee', 'cs', 'econ'); dept1 = departments(1,:); % (1,:)代表第一列的元素 dept2 = deblank(dept1); % 使用 deblank 指令来移除尾部的空格符 len1 = length(dept1) % 显示变量 dept1 的长度=4 len2 = length(dept2) % 显示变量 dept2 的长度=2
departments = ee cs econ
一个变量来储存多个字符串
用char 指令储存多个字符串
departments = char('ee', 'cs', 'econ') % 注意「()」及「,」的使用
得到结果和前一个范例一样; 从二维字符数组抽取出字符串时,切记要使用 deblank 指令来移除尾部的空格符 范例10-15: string203.m
.
一个变量来储存多个字符串
当字符串的长度差异甚大,那么使用二维字符 数组来储存多个字符串,将造成内存空间的浪 费,怎么办? 「异质数组」: 使用大括号框住多个字符串, 或 用cellstr指令将字符数组转换成异质数组 (string204.m,string205.m) 若要将包含字符串的异质数组转换成一般的二 维字符数组,还是可以使用 char 指令
line2 = 我是Roger ans = 7
10-4 字符串、数值与数组的转 换
int2str 指令: 将整数型态的数据转换成字 符串数据 例如:y = int2str(x), x为整数, y 为字符串 num2str 指令: 将实数转为字符串 dec2hex 指令: 将 10 进位数值数据转换 成 16 进位的字符串表示法 更多类似指令如 : hex2num, hex2dec, bin2dec….
Matlab 用「单引号」来界定字符串变量,多个 字符串变量可直接并排,以得到一个新字符串 变量,例如: 范例10-2: string102.m
str1 = 'I like MATLAB,'; str2 = ' JavaScript, and Perl!'; str3 = [str1 str2] str3 % 建立字符串变量 str1 % 建立字符串变量 str2 % 直接并排str1 及 str2,以建立
10-3 字符串的比较、寻找、 代换、分解与结合
strcmp 指令: 用于比较字符串内容的异 同 str1 = 'today'; 范例10-19: string301.m
str2 = 'tomorrow'; str3 = 'today'; out1 = strcmp(str1, str2) out2 = strcmp(str1, str3) % 比较两字符串 str1 和 str2 = 0 % 比较两字符串 str1 和 str3 = 1
10-1 字符与字符串的基本概念
数个字符(Characters)可以构成一个字 符串(Strings) 一个字符串是被视为一个行向量(Row Vector)进行储存 此一字符串中的每一字符(含空格符), 是以其 ASCII 码的形式存放于此列向量 中的每一个元素(Element)
字符与字符串的基本概念
phraseascii = Columns 1 through 12 73 39 118 101 32 103 111 116 32 97 32 100 Columns 13 through 16 97 116 101 33 sentence2 = I've got a date!
字符的储存
无论是中文或英文,每一个字符都会占用两个字节(2 Bytes),故在上页中,字符串变量 sentence 总共由 16 个字符构成,占用的内存总计为三十二个字节(32 bytes) whos 指令: 检视字符串变量 sentence 所占用储存空间 (whos 变量) MATLAB 是以两个字节来储存一个字符,所以也可以支 持 Big5 的中文码,而且 Big5 中文的 ASCII 内码都会大 于数字 128 由于 MATLAB 将字符串以其相对应之 ASCII 内码(即数 字形式)储存成一行向量,故若对此字符串直接进行数 值运算,MATLAB 会先将此字符串转成数值,再进行一 般数值向量的运算
Grand total is 86 elements using 688 bytes
x3 , x4 , x5 , x6 都是在 for - loop 中产生的变量,分别代表维度为 3×3、4×4、 5×5、6×6 的魔方阵
字符串的判断
class 或 ischar 指令: 判断某一个变量是 否为字符串 范例10-12: string112.m
字符与字符串
本章简介
本章介绍 MATLAB 用于处理字符(Characters) 与字符串(Strings)的指令及相关数据型态。 MATLAB 处理字符串的相关指令大部分都放在 下列目录之中: {MATLAB 根目录}\toolbox\matlab\strfun 其中的「strfun」就是代表「String Functions」。若要查询与字符和字符串相关的 指令,可在 MATLAB 下输入: help strfun 或是 help strings
ans =
16
字符串和其ASCII code
double 指令: 检视字符串变量的储存内容(即 ASCII 内码) char 指令: 将 ASCII 内码转回字符串形式 范例10-6: string106.m
sentence = 'I''ve got a date!'; sentenceAscii = double(sentence); %检视 sentence 的 ASCII 码 sentence2 = char(sentenceAscii) % 将 ASCII 码转回字符串形式
10-2 一个变量来储存多个字符 串
第一种方法是使用二维字符数组(Two Dimensional Character Arrays) 必须先确认每个字符串(即每一横列)的长度 一样,否则就必须在短字符串结尾补上空格符 范例10-13: string201.m % 注意空格符的使用 departments = ['ee '; 'cs '; 'econ']
源自文库
B= [1 2 1;3 5 6] ans = 1
字符串与数值的结合
sprintf 指令: 结合数值或字符串,以产生新字符串 (%s-印出字符串,%g-印出数值,可使用 %f 或加上控制 印出位数大小的数字 ) 范例10-33: string406.m
str = '圆周率'; newString = sprintf('「%s」是 %g', str, pi)
newString = 「圆周率」是 3.14159
sscanf 可依给定的格式来解析出所要的字符串或数值 范例10-34: string407.m
str = '2 4.7 5.2'; mat = sscanf(str, '%f')
mat = 2.0000 4.7000 5.2000
设计一个函数 captalize.m,其用法 如下: outputStr = capalize(inputStr) 其中 inputStr 是一个输入英文字符 串,函数 captalize 会将此字符串中, 每个字(Word)的第一个字母改成 大写,其余则为小写,并将多个空 格代换成一个空格,outputStr 则是 最后的输出字符串。例如,当输入 是 'you are My sunshine' 时,所得 到的输出字符串是 'You Are My Sunshine'。
input_string = 'ee cs econ stat me'; remainder = input_string; parsed = ''; % 建立一空字符数组 while (any(remainder)) [chopped, remainder] = strtok(remainder); parsed = strvcat(parsed, chopped); end parsed
字符串的分解
strtok 指令: 根据一给定的分界字符(Delimiting Characters),将一字 符串拆解成数个字符串,预设分界字符为空格符 strvcat 指令: 将拆解下来的字符串内容(即储存在字符串变量 chopped 中) 加到二维字符数组 parsed 中 范例10-24: string306.m
不相等回传0,相等回传1 DIFFERENT to C
字符串的比较和寻找
strncmp 指令: 用于比较字符串的前 n 个 字符 strcmp 及 strncmp 指令亦可用于字符串 异质数组 findstr 指令: 寻找在某一个长字符串中的 子字符串(Substrings),并传回其起始 位置 strrep 指令: 用于字符串寻找及代换,例 如: newString = strrep(string, pattern, pattern2)