1. 程式人生 > >matlab裡cell和char,字串與字元陣列(zz)

matlab裡cell和char,字串與字元陣列(zz)

用importdata和textscan讀取內容為字串的txt,結果為cell型元胞組。

我想把cell變成char型,然後就自然地想到cell2str,遺憾的是matlab中沒有這個函式。

就像沒有str2cell一樣。

實現str2cell功能的函式是cellstr,將字元陣列轉換為cell型字串陣列

函式語法為c = cellstr(S)

它的作用是:將字元陣列S中的每行分割成為cell細胞元組C的一個元素。並刪除S的每行尾部空格

正好與char相反,char是將cell字串陣列轉化為字元陣列s=char(c)

很多人分不開字元陣列和字串什麼區別。
>>str1='i love matlab' % 這是一個字元陣列,也是一個字串
str1 =
i love matlab

>>str2=['I ';'am ';'a ';'boy'];% 這是字元陣列

,由於是陣列,所以每一行必須具有相同的列數(字元數相同),不夠補空格
str2 =
I
am
a
boy

由於字元陣列必須滿足每一行具有相同的字元數,所以輸入時很麻煩。通常情況我們使用char函式來完成自動補充空格或者建立字串cell細胞元組
>>char('i','love','matlab') % char函式會自動補充空格
ans =
i
love
matlab

>>{'i','love','matlab'} % 在cell字串中,每個單元都可以完全不同的內容,所以,不需要補充空格
ans =
'i' 'love' 'matlab'


下面來看幾個例子:

例1:建立一個字串陣列,記住補空格
>>S= ['abc '; 'defg'; 'hi '] (下劃線代表空格)
S =
abc
defg
hi

>>whos S
Name Size Bytes Class
S    3x4  24    char array

例2:下面使用cellstr將字元陣列,轉換為3*1的cell細胞元組,此時尾部空格會自動刪除 :
>>c = cellstr(S)
c =
'abc'
'defg'
'hi'

>>whos c
Name Size Bytes Class
c    3x1

  294   cell array

例3:再使用char函式將cell字串轉換為字元陣列
>>char(c)
ans =
abc
defg
hi

>> whos ans
Name Size Bytes Class Attributes
ans  3x4  24    char