張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室

Slides:



Advertisements
Similar presentations
1 第九原則:適當的質與量 組員名單 : 薛文惠 林姵伶 林于綾 張銘芳 陳淑慧 指導教師 : 蘇明俊 老師.
Advertisements

MATLAB 程式設計入門篇 第十章:字元與字串 張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室.
第 5 章 中國的都市.
近年来,出现了一些制作粗糙、违背史实甚至常理的“抗战雷剧”,社会上也出现了一股“戏说”抗战剧的不良风气。
电子成绩单项目实现.
歷史建築清水國小宿舍群修復工程 施工說明會
浪漫 碰撞 蜕变 专题八 19世纪以来的文学艺术.
德国波恩明斯特广场修建的贝多芬铜像( 1845年)
中五級中史科及通識科跨科研習 研習大澳的「宗教文化」─ 廟宇的研習 指導老師:周婉儀老師 組員: 陳偉欽 5a (15)
引導者的角色 組別:第5組 4A1I0003 劉芷媛 4A1I0004 陳安琪 4A1I0014 陳佳瑩 4A1I0046 葉倢茹
第九章 字串 (String).
孤 獨 台灣民謠-莫斯科交響樂團-春天那愷這呢寒.
您買美元了嗎? 退休規劃 全球外幣保單.
TQC+ 物件導向程式認證-JAVA.
古文閱讀 – 像虎伏獸 明 劉基 組員: 5號江依倫 6號江若薇 12號張珉芫 32號蔡燕如.
Matlab教學 Speaker:林昱志 Date:2012/10/18.
网络游戏对大学生生活的影响 英本1班 鞠申镅 汪晨茹 沈秋云 元文杰 段祺琪.
第6章 字符串、数组、簇和矩阵.
第6章 字符串、数组、簇和矩阵.
補充: Input from a text file
性別透視鏡 鳳鳴電台 高宜君老師.
第8章 字串與陣列 8-1 字串處理 8-2 一維陣列的處理 8-3 建立多維陣列 8-4 不規則陣列與參數傳遞 8-5 陣列排序與搜尋.
國語文好點子趴辣客教學食譜 甜點:〈焦糖鳥布蕾〉
Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所
課程名稱:程式設計 授課老師:________
字元與字串 方煒 台大生機系.
Visual Basic 6.0 學習範本 第三章 基本資料型態.
黃聰明 國立臺灣師範大學數學系 其它的資料型態與繪圖型態 黃聰明 國立臺灣師範大學數學系 T.-M.Huang.
A3-1 數字系統 A3-2 資料表示法 A3-3 資料的儲存
張智星 清大資工系 補充內容:方煒 台大生機系
第3章 變數、資料型別與運算子.
范洪源 臺灣師範大學數學系 MATLAB 基本功能介紹 范洪源 臺灣師範大學數學系.
Matlab教學 Speaker:林昱志 Date:2012/10/25.
Matlab M檔案 方煒 台大生機系.
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
第七章 字符串处理 7.1 字符阵列 7.2 字符串单元阵列 7.3 字符串比较 7.4 字符串搜索与取代 7.5 字符串与数值之间的变换
文字資料表示法 & 布林代數與數位邏輯.
張智星 清大資工系 多媒體檢索實驗室 第九章: 矩陣的處理與運算 張智星 清大資工系 多媒體檢索實驗室.
張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室
第3章 變數、資料型別與運算子 3-1 變數與資料型別的基礎 3-2 變數的命名與宣告 3-3 資料型別 3-4 運算式與運算子
黃聰明 國立臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 國立臺灣師範大學數學系
新觀念的 VB6 教本 第 6 章 資料型別.
第4章 常量和变量 常量和变量都是程序中预留的用于保存数据的内存空间。常量的值在程序运行过程中始终不会发生变化。而变量的值在程序的运行过程中是可以变化的。在Fortran语言中,有五种基本的数据类型可供使用。他们分别是整型(INTEGER)、实型(REAL)、复型(COMPLEX)、字符型(CHARACTER)和逻辑型(LOGICAL)。按用途,又可以分数值型、字符型和逻辑型三种。相应的常量和变量也可以分为这三种。本章将按照用途介绍常量和变量的基本概念。
引 言.
IT&SAMS小組 (IIT - 倉頡輸入法)
第九章: 矩陣的處理與運算 張智星 (Roger Jang)
Ch02-基礎語法.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
MATLAB 程式設計入門篇 初探MATLAB
第2章 MATLAB程序设计 编者.
共有六個運算性質 包括它的證明以及相關題型
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
張智星 台大資工系 多媒體檢索實驗室 第十一章 資料保護 張智星 台大資工系 多媒體檢索實驗室.
Speaker: Liu Yu-Jiun Date: 2009/4/29
MATLAB 程式設計入門篇 初探MATLAB
學這些有什麼好處呢? 為了把資料作更客觀之總結描述或比較多組資料。總而言之,就是要找出一個數能代表整組數據。
MATLAB 程式設計入門篇 初探MATLAB
西南科技大学网络教育系列课程 数学软件 数学软件 第3讲 MATLAB数组与运算 主讲教师: 鲜大权 副教授 西南科技大学理学院数学系.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
智慧財產權管理講次36 積體電路電路布局保護法(1) 主講:吳銘圳
第6章 字符串、数组、簇和矩阵.
變數、資料型態、運算子.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
變數與資料型態  綠園.
C++程序语言设计 Chapter 14: Templates.
30 歲前 一定要做的21件事.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
MATLAB 程式設計入門篇 程式除錯 張智星 (Roger Jang)
数学实验之 回归分析(2).
Presentation transcript:

張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室 第十章:字元與字串 張智星 (Roger Jang) jang@mirlab.org http://mirlab.org/jang 清大資工系 多媒體檢索實驗室

本章簡介 本章介紹 MATLAB 用於處理字元(Characters)與字串(Strings)的指令及相關資料型態。MATLAB 處理字串的相關指令大部分都放在下列目錄之中: {MATLAB 根目錄}\toolbox\matlab\strfun 其中的「strfun」就是代表「String Functions」。若要查詢與字元和字串相關的指令,可在 MATLAB 下輸入: help strfun help strings

10-1 字元與字串的基本概念 數個字元(Characters)可以構成一個字串(Strings) 一個字串是被視為一個列向量(Row Vector)進行儲存 此一字串中的每一字元(含空白字元),是以其 ASCII 碼的形式存放於此列向量中的每一個元素

字元與字串的基本概念 Matlab 用「單引號」來界定字串變數,多個字串變數可直接並排,以得到一個新字串變數,例如: 範例10-2: string102.m str3 = I like MATLAB, JavaScript, and C++! str1 = 'I like MATLAB,'; % 建立字串變數 str1 str2 = ' JavaScript, and C++!'; % 建立字串變數 str2 str3 = [str1 str2] % 直接並排str1 及 str2,以建立str3

字元與字串的基本概念 欲輸入含有單引號的字串,可重覆單引號的使用 若要計算字串變數的長度(即組成字元的個數),可用 length 指令 範例10-4: string104.m ans = 16 sentence = 'I''ve got a date!'; length(sentence) % 計算字串變數 sentence 的長度

字串和其ASCII code double 指令: 檢視字串變數的儲存內容(即 ASCII 內碼) char 指令: 將 ASCII 內碼轉回字串形式 範例10-6: string106.m sentence2 = I've got a date! sentence = 'I''ve got a date!'; sentenceAscii = double(sentence); %檢視 sentence 的 ASCII 碼 sentence2 = char(sentenceAscii) % 將 ASCII 碼轉回字串形式

字元的儲存 無論是中文或英文,每一個字元都會佔用兩個位元組(2 Bytes),故在上頁中,字串變數 sentence 總共由 16 個字元構成,佔用的記憶體總計為三十二個位元組(32 bytes) whos 指令: 檢視字串變數 sentence 所佔用儲存空間 MATLAB 是以兩個位元組來儲存一個字元,所以也可以支援中文(MATLAB內部都是以unicode來儲存),而且 中文的 ASCII 內碼都會大於數字 128 由於 MATLAB 將字串以其相對應之 ASCII 內碼(即數字形式)儲存成一列向量,故若對此字串直接進行數值運算,MATLAB 會先將此字串轉成數值,再進行一般數值向量的運算

字元與字串的基本概念-eval eval 指令: 直接“執行”某一特定字串,其效果就如同直接在 MATLAB 指令視窗內輸入此一特定字串 eval 指令特別適用於在 for-loop 內自動產生有規律的變數名稱 範例10-11: string111.m Name Size Bytes Class x3 3x3 72 double array x4 4x4 128 double array x5 5x5 200 double array x6 6x6 288 double array Grand total is 86 elements using 688 bytes x3 , x4 , x5 , x6 都是在 for-loop 中產生的變數,分別代表維度為 3×3、4×4、5×5、6×6 的魔方陣 clear all % 清除所有變數 for i = 3:6 eval(['x', int2str(i) , '= magic(' , int2str(i) , ') ; ']); end whos x*

字串的判斷 class 或 ischar 指令: 判斷某一個變數是否為字串 範例10-12: string112.m 字串變數所佔用的空間是同長度雙精準(Double)數值變數的四分之一 chinese = '今日事,今日畢'; out1 = class(chinese) % out1 的值是 “char”,代表chinese 是字串變數 x = chinese+1; out2 = ischar(x) % out2 的值是 0,代表 x 不是一個字串變數

10-2 一個變數來儲存多個字串 第一種方法是使用二維字元陣列(Two Dimensional Character Arrays) 必須先確認每個字串(即每一橫列)的長度一樣,否則就必須在短字串結尾補上空白字元 範例10-13: string201.m departments = ee cs econ departments = ['ee '; 'cs '; 'econ'] % 注意空白字元的使用

一個變數來儲存多個字串 用char 指令儲存多個字串 得到結果和前一個範例依樣; 從二維字元陣列抽取出字串時,切記要使用 deblank 指令來移除尾部的空白字元 範例10-15: string203.m . departments = char('ee', 'cs', 'econ') % 注意「()」及「,」的使用 departments = char('ee', 'cs', 'econ'); dept1 = departments(1,:); % (1,:)代表第一列的元素 dept2 = deblank(dept1); % 使用 deblank 指令來移除尾部的空白字元 len1 = length(dept1) % 顯示變數 dept1 的長度=4 len2 = length(dept2) % 顯示變數 dept2 的長度=2

一個變數來儲存多個字串 當字串的長度差異甚大,那麼使用二維字元陣列來儲存多個字串,將造成記憶體空間的浪費,怎麼辦? 「異質陣列」: 使用大括號框住多個字串, 或用cellstr指令將字元陣列轉換成異質陣列 (string204.m,string205.m) 若要將包含字串的異質陣列轉換成一般的二維字元陣列,還是可以使用 char 指令

10-3 字串的比較、尋找、 代換、分解與結合 strcmp 指令: 用於比較字串內容的異同 範例10-19: string301.m 不相等回傳 0,相等回傳 1,和 C 程式語言的strcmp()函數剛好相反,要特別注意! str1 = 'today'; str2 = 'tomorrow'; str3 = 'today'; out1 = strcmp(str1, str2) % 比較兩字串 str1 和 str2 = 0 out2 = strcmp(str1, str3) % 比較兩字串 str1 和 str3 = 1

字串的比較和尋找 strncmp:用於比較字串的前 n 個字元 strcmp 及 strncmp 指令亦可用於字串異質陣列 findstr:尋找在某一個長字串中的子字串(Substrings),並傳回其起始位置 strrep:用於字串尋找及代換,例如: newString = strrep(string, pattern, pattern2)

字串的分解 strtok 指令: 根據一給定的分界字元(Delimiting Characters),將一字串拆解成數個字串,預設分界字元為空白字元 strvcat 指令: 將拆解下來的字串內容(即儲存在字串變數 chopped 中) 加到二維字元陣列 parsed 中 範例10-24: string306.m parsed = ee cs econ stat me input_string = 'ee cs econ stat me'; remainder = input_string; parsed = ''; % 建立一空字元陣列 while (any(remainder)) [chopped, remainder] = strtok(remainder); parsed = strvcat(parsed, chopped); end parsed

字串的結合 MATLAB 在讀入中文字串時,將每一個中文字的 2-byte 分開來讀,造成兩個中文字變成四個字串元素 native2unicode可將中文的 2-byte 「結合」在一起 範例10-27: string309.m line2 = 我是Roger ans = 7 (註:這個中文讀取問題在MATLAB7.2版之後,已經解決了!) fid = fopen('big5.txt'); line = fgetl(fid); % 讀取一列檔案內容 fclose(fid); line2 = native2unicode(line, 'big5') %將被拆開的中文字結合在一起 leng = length(line2) % 顯示字串長度

10-4 字串、數值與陣列的轉換 int2str 指令: 將整數型態的資料轉換成字串資料 例如:y = int2str(x),x為整數, y 為字串 num2str 指令: 將實數轉為字串 dec2hex 指令: 將 10 進位數值資料轉換成 16 進位的字串表示法 更多類似指令如 : hex2num, hex2dec, bin2dec….

字串陣列的轉換 mat2str 指令可將矩陣轉換為字串,此字串若再經由 eval 指令,可再變回原先的矩陣 範例10-32: string405.m B = [1 2 1;3 5 6] ans = 1 A = [1 2 1; 3 5 6 ]; B = mat2str(A) % 將矩陣 A 轉成字串 B A2 = eval(B) % 再將字串 B 轉回矩陣 A2 isequal(A, A2) % 測試 A 和 A2 是否相等

字串與數值的結合 sprintf 指令: 結合數值或字串,以產生新字串 (%s-印出字串, %g-印出數值,可使用 %f 或加上控制印出位數大小的數字 ) 範例10-33: string406.m newString = 「圓周率」是 3.14159 sscanf 可依給定的格式來解析出所要的字串或數值 範例10-34: string407.m mat = 2.0000 4.7000 5.2000 str = '圓周率'; newString = sprintf('「%s」是 %g', str, pi) str = '2 4.7 5.2'; mat = sscanf(str, '%f')