1. 程式人生 > >matlab字串連線(多個字串)的經驗

matlab字串連線(多個字串)的經驗

參考 matlab中字串連線的3種方法  文章,實驗遇到的一些小白問題,如有問題希望大神們給予指導。

Matlab中,兩個或多個字串連線常用的三種方法,如下:

背景知識:

1、char 和 string 區別

從定義的角度來說,單引號‘ ’定義的為char型別,雙引號“ ”定義的為string型別。

2、字串陣列(char)和字串(string)區別

字串陣列就相當於資料型別為char的矩陣或向量,用單引號建立,可以索引。

string相當於一個類,用string()函式建立例項物件,所以有一些函式可以對string進行操作。

 

方法一:[str1,str2] 

字串陣列(char型別)的連線

假設兩個char型別

str1 =  'save ';

str2 =  '.mat uData';

>> [str1,str2]

ans = 
    
    'save .mat uData'

假設兩個char型別和一個string型別

str1 =  'save ';

str2 =  '.mat uData';

str3 = "000";

>> [str1,str3,str2]  

ans =
  
  1×3 string 陣列

    "save "    "000"    ".mat uData";

輸出的結果變成string陣列,因此可知string優先順序高於char的優先順序。

如果考慮利用char()函式對結果進行處理會如何?

>> char([str1,str3,str2])

  1×10×3 char 陣列

ans(:,:,1) =

    'save      '

ans(:,:,2) =

    '123       '

ans(:,:,3) =

    '.mat uData'

得到一個三維的char型別的矩陣(不知為何有三維,第二、三維分別表示最長字串的長度10和所要拼接的字串的數3量)。

因此,[str1,str2,...]的方法是將非char型別的資料轉換成char的型別,然後再使用該方法則可以得到char型別的輸出結果。

>> [str1, char(str3), str2]

ans =

    'save 000.mat uData'

方法二:strcat函式

實質上,strcat函式的方法是在string資料型別進行字元拼接,然後將最後的結果轉換成型別char的字串。

下面介紹該方法的一個問題:

str1 =  'save ';  %請注意後面的空格

str2 =  '.mat uData';

str3 = "000";

>> char(strcat(str1, str3, str2))

ans =

    'save000.mat uData'   %請注意後面的空格已丟失

分析後,發現在strcat中會出現該情況,可能是在連線過程中會將空格刪除掉,如果是string型別,則不會丟失,如下方法1.

>> char(strcat("save ", str3, str2))

或者

>> char(strcat('save'," ", str3, str2)) 

ans =

    'save 000.mat uData'

上述兩種方法輸出正常。值得注意的是,方法2,空格需要採用雙引號,這是因為strcat函式在連線字串主要注意空格的轉義方面的知識(現在不太瞭解,望見諒)

方法三:sprintf函式

>> sprintf('%s%s%s', str1, str3, str2)

ans =

    'save 000.mat uData'

該方法至今沒有發現問題。