Chapter 11 Strings and Vectors. Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 2 Overview An Array Type for Strings (11.1) The Standard.

Slides:



Advertisements
Similar presentations
FCU, Department of ECE, IC Design Research Lab. TEL: # 4945 Pre-SIm , Post-Sim.
Advertisements

6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
:Word Morphing ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10508:word morphing 解題者:楊家豪 解題日期: 2006 年 5 月 21 日 題意: 第一行給你兩個正整數, 第一個代表下面會出現幾個字串,
3Com Switch 4500 切VLAN教學.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
如何將數字變成可用之資訊 現代化資料處理與應用概念. 如何將數字變成可用之資訊 人最容易接受的訊息是圖像化資訊。 在一堆數字中,要進行比較分析,一般會使用表格形 式計算與分析。 所以一般我們會將數字依關聯性, 轉換成表格計算與分析。 此表格一般稱試算表或稱表格。 再將結果轉換為圖表,進行比較與分析。
1 Web of Science 利用指引 單元二 瀏覽與處理查詢結果. 2 瀏覽檢索結果 查出的結果,預設以時間排列, 使用者可改變結果的排列方式: 還可以依被引用次數、相關度、 第一作者、刊名、出版年等排序 回到前先查的結果畫面 點選想看資料的完整書目 本館訂購範圍的期刊 全文,便可直接連結.
五小專案 黃詩晴 章乃云. 目錄 計算機 智慧盤 拼圖 記憶大挑戰 數學題庫 心得 參考文獻.
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
: ShellSort ★★☆☆☆ 題組: Problem D 題號: 10152: ShellSort 解題者:林一帆 解題日期: 2006 年 4 月 10 日 題意:烏龜王國的烏龜總是一隻一隻疊在一起。唯一改變烏龜位置 的方法為:一隻烏龜爬出他原來的位置,然後往上爬到最上方。給 你一堆烏龜原來排列的順序,以及我們想要的烏龜的排列順序,你.
JAVA 程式設計與資料結構 第二章 JAVA 程式基本概念及操作. 第一個程式 /* * 這是第一個程式 (FirstP.java) */ class FirstP{ public static void main(String args[]){ System.out.println("Whatever.
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
MATLAB 程式設計 第 11 章 多維陣列 多維陣列的定義 在 MATLAB 的資料型態中,向量可視為 一維陣列,矩陣可視二維陣列,對於維 度 (Dimensions) 超過 1 的陣列則均可視 為「多維陣列」 (Multidimesional Arrays , 簡稱 N-D Arrays)
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Monte Carlo Simulation Part.2 Metropolis Algorithm Dept. Phys. Tunghai Univ. Numerical Methods C. T. Shih.
第一章 演算法:效率、分析與量級 1.1演算法 1.2發展有效率演算法的重要性 1.3演算法的分析 1.4量級(Order)
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
長訊科技 EVRCOM Voice Mail System 使用者操作說明及流程. 自動總機 -- 來電語音轉接服務流程 ( 範例流程 )
Introduction to Java Programming Lecture 5: Using Java Classes : String & Math Spring 2009.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
: The largest Clique ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11324: The largest Clique 解題者:李重儀 解題日期: 2008 年 11 月 24 日 題意: 簡單來說,給你一個 directed.
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
: Tight words ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: : Tight Words 解題者:鐘緯駿、林一帆 解題日期: 2006 年 03 月 14 日 題意: 給定數字 k 與 n (0 ≦ k.
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
Chapter 2 Getting Started Insertion Sort: 能有效率地排序小數字的演算法 範例 :
資料庫程式設計與系統管理 SQL Server 2005 Express 第六章 進階資料庫設計.
: Ahoy, Pirates! ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11402: Ahoy, Pirates! 解題者:李重儀 解題日期: 2008 年 8 月 26 日 題意:有一個海盜島有 N 個海盜,他們的編號 (id)
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
資料結構實習-一 參數傳遞.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
: Problem G e-Coins ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10306: Problem G e-Coins 解題者:陳瀅文 解題日期: 2006 年 5 月 2 日 題意:給定一個正整數 S (0
Management Abstracts Retrieval System; MARS 檢索操作.
: A-Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10930: A-Sequence 解題者:陳盈村 解題日期: 2008 年 5 月 30 日 題意: A-Sequence 需符合以下的條件, 1 ≤ a.
: Beautiful Numbers ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11472: Beautiful Numbers 解題者:邱經達 解題日期: 2011 年 5 月 5 日 題意: 若一個 N 進位的數用到該.
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
資料結構實習-二.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
: Expect the Expected ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11427: Expect the Expected 解題者:李重儀 解題日期: 2008 年 9 月 21 日 題意:玩一種遊戲 (a game.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
Chapter 10 m-way 搜尋樹與B-Tree
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
JAVA 程式設計與資料結構 第十六章 Hash Tables. Introduction Hash Tables 結構為一個 Array ,稱之為 Bucket array 。 如果想要新增一個物件,要根據這個物件的特性 將其加入 Hash Table 內。 Bucket Array 用 A 來代替,其.
Probability Distribution 機率分配 汪群超 12/12. 目的:產生具均等分配的數值 (Data) ,並以 『直方圖』的功能計算出數值在不同範圍內出現 的頻率,及繪製數值的分配圖,以反應出該 機率分配的特性。
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
連續隨機變數 連續變數:時間、分數、重量、……
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/30 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH7.1~CH /12/26.
Miscellanea Switch Bitwise operations ?,. break; continue; (example) (example) do { a = getc(stdin); if (a=='q') break; else if (a=='c') continue; n++;
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
Visual C++重點複習.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
第8章 字串與陣列 8-1一維陣列的處理 8-2 字串處理 8-3 多維陣列的處理 8-4 動態陣列與參數傳遞 8-5 陣列排序與搜尋.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
: How many 0's? ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11038: How many 0’s? 解題者:楊鵬宇 解題日期: 2007 年 5 月 15 日 題意:寫下題目給的 m 與 n(m
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Presentation transcript:

Chapter 11 Strings and Vectors

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 2 Overview An Array Type for Strings (11.1) The Standard string class (11.2) Vectors(11.3)

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide An Array Type for Strings C-strings 用來表示字元串接成的字串 C-strings 被儲存成字元陣列 C-strings 以 虛字元 ‘\0’ 來結束字串 虛字元 ‘\0’ 為一特殊字元 宣告 C-strings 的語法: char s[11];

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 4 s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]s[9] HiMom!\0?? C-string Details 如 char s[10] 的 C-string 宣告, 會產生一個能放入 9 個字元的記憶體空間 保留一個字元的空間來放結束字串的虛字元 ‘\0’ 一個 C-string 變數不需要另外的變數來表示其含 有多少個字元 ( 就是大小 ) 虛字元緊接在字串的最後一個字元 範例:

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 5 C-string Declaration 宣告 C-string 變數的語法 : char Array_name[ Maximum_C_String_Size + 1]; + 1 保留了放置 ‘\0‘ 所需的一個字元的記憶體空間

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 6 Initializing a C-string 在宣告時就給初始值 : char my_message[20] = "Hi there."; 系統會自動於最後補上虛字元 ‘\0’ 另一種方式 : char short_string[ ] = “abc”; 但以下字元陣列不能代表字串 : char short_string[ ] = {'a', 'b', 'c'}; 上面的錯誤是因為在給字元陣列初始值時,系統不會自 動補上虛字元 ‘\0’

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 7 Don't Change '\0' 運用 C-string 中的索引時,不要隨意將虛字元 ( the null character) 取代掉 如果虛字元不見了,該字元陣列就不能表現出字串的相 關操作 Example: int index = 0; while (our_string[index] != '\0') { our_string[index] = 'X'; index++; } 上面這個迴圈範例要靠找到字串的結束虛字元 (the null character!)

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 8 Safer Processing of C-strings 上面這個迴圈範例要靠找到字串的結束虛字元 (the null character!) ,萬一虛字元 ‘\0’ 已被換掉的話, 上面的程式碼將無法控制,為避免上述情況,最好 改用下面這個程式碼 int index = 0; while (our_string[index] != '\0‘ && index < SIZE) { our_string[index] = 'X'; index++; } // 限制索引有效範圍不能超過 SIZE

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 9 Assignment With C-strings 以下這列程式碼不合語法 : a_string = "Hello"; 這是一個將右方值指定給左方變數的程式碼,而不是宣 告時給的初始值 這種指定的運算子不能適用於 C-strings

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 10 Assignment of C-strings 指定一個字串給 C-string 變數要使用 定義於 cstring 函式庫的 strcpy 函式 Example: #include … char a_string[ 11]; strcpy (a_string, “Hello”); - 將 “Hello” 及其後的一個 null character 複製到 a_string 字元陣列中

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 11 A Problem With strcpy 使用 strcpy 時要注意 strcpy 並未檢查第一個字元陣列參數的長度 因此第 2 個參數的長度有可能會超過第 1 個參數的陣列 大小,覆蓋掉該陣列之後的記憶體的內容,造成程式當 機

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 12 A Solution for strcpy strncpy 是比較安全的 strcpy strncpy 使用第 3 個參數來限定最多會複製的字元數目 Example: char another_string[10]; strncpy(another_string, a_string_variable, 9); 這個程式碼最多複製 9 個字元到 another_string ,留下一個字元空間給 '\0'

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 13 == Alternative for C-strings = = 運算子也不能用來檢查兩個 C-string 是否相等 必須改用 strcmp 來比較兩個 C-string 變數 Example: #include … if (strcmp(c_string1, c_string2)) cout << "Strings are not the same."; else cout << "String are the same.";

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 14 strcmp's logic strcmp 由左至右比較兩參數之數字碼大小 ( 依據 ASCII 碼 ) 如果兩邊相等, strcmp returns 0 0 在 C++ 會被解析為 false 只要找到不相等之對應字元 如果第 1 個參數的值較小, strcmp returns 負值 如果第 1 個參數的值較大, strcmp returns 正值 非 0 (Non-zero) 之值在 C++ 會被解析為 true

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 15 More C-string Functions cstring 函式庫包括以下常用函式: strlen 傳回 C-string 參數的字元數 int x = strlen( a_string); strcat 串接兩個 C-strings 第 2 個參數加到第 1 個參數之後 得到的 C-string 放在第 1 個參數 Example: char string_var[20] = “The rain”; strcat(string_var, “in Spain”); string_var 的 C-string 為 "The rainin Spain"

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 16 Display 11.1 (1) Display 11.1 (2) The strncat Function strncat 是 strcat 的安全版本 第 3 個參數會限定最多可以新增的字元數 Example: char string_var[20] = "The rain"; strncat(string_var, "in Spain", 11);

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 17 C-strings as Arguments and Parameters C-string 變數都是陣列 C-string 用於函式的定義及呼叫的方式與陣列相同 如果函式會改變 C-string 參數的內容,最好多加上一個 表示該 C-string 大小的參數,以策安全 如果函式會改變 C-string 參數的內容, 可以檢查 the null character (‘\0’) 來決定 C-string 是否已結束,因此 不需要多加上一個表示該 C-string 大小的參數

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 18 C-string Output C-strings 可以用 << 輸出 Example: char news[ ] = "C-strings"; cout << news << " Wow." << endl;

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 19 C-string Input >> 可以輸入 C-string 變數的值 遇到 Whitespace ( 如 ‘ ‘, ‘\n’, ‘\t’) 會結束 C-string 的讀取 Example: char a[80], b[80]; cout > a >> b; cout << a << b << “End of Output”; 使用者介面顯示如下 : Enter input: Do be do to you! DobeEnd of Output

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 20 Reading an Entire Line getline 可以讀入一整列文字,包括 ‘ ‘ 及 ‘\t’ getline 是 all input streams 的一個成員函式,可用於命 令提示字元視窗或檔案輸入 getline 有兩個參數 第一個參數是 C-string 變數,用來放置讀入的一整列文字 ( 不包 括 ‘\n’ ) 第一個參數是一個整數,通常就是第 1 個參數的陣列大小,用 來指定這一列文字最多能填入第一個參數的字元數目

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 21 Using getline 讀入一整列的範例 char a[80]; cout << "Enter input:\n"; cin.getline(a, 80); cout << a << End Of Output\n"; 使用者介面顯示如下 : Enter some input: Do be do to you! Do be do to you!End of Output

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 22 getline wrap up 當讀入的字元數達到 第 2 個參數的值 -1 , getline 會停止讀取字元的動作 一個字元的空間要保留給 the null character (‘\0’) 即使還沒讀到此列最後, getline 也會不再讀取後續的字 元

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 23 getline and Files C-string 輸入 (>>) 及輸出 (<<) 同樣適用於檔案 只要將 cin 換成輸入檔案的字串流即可 in_stream >> c_string; in_stream.getline(c_string, 80); 只要將 cout 換成輸出檔案的字串流即可 out_stream << c_string;

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 24 getline syntax getline 與語法如下 cin.getline(CString_Var, Max_Characters + 1); cin 可換成輸入檔案的字串流 Max_Characters + 1 保留一個字元記憶體空間給 the null character(‘\0’)

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 25 C-String to Numbers “1234” 是一個字串 1234 是一個數字 當進行數字的輸入時, 有時可以先將字元以 C- String 的方式讀入, 再將該字串轉成數字 例如讀入金額時可以先處理掉 ‘$’ 字元 讀入百分比時可以先處理掉 ‘%’ 字元

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 26 C-strings to Integers 如何將 integer 以字元的方式讀入 將字元放到 C-string, 將不需要的字元移除 使用預設函式 atoi 將 C-string 轉成一個 int 的值 Example: atoi("1234") returns the integer 1234 atoi("#123") returns 0 because # is not a digit

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 27 C-string to long 大一點的整數可使用 atol 來轉換 atol 傳回值的資料型態是 long

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 28 C-string to double 使用 atof 可以將 C-strings 轉換成 double 資料型 態 Example: atof("9.99") returns 9.99 atof("$9.99") returns 0.0 because the $ is not a digit

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 29 Library cstdlib 這些轉換函式 atoi atol atof 都在 cstdlib 函式庫 要使用時需 #include

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 30 Display 11.2 (1) Display 11.2 (2) Numeric Input 知道如何將 C-String 轉成數字後 如何讀入字元 ? 在 Display 11.2 中, read_and_clean 函式會 讀入一整列字元 捨棄不是 ‘0’ 到 ‘9‘ 的字元 使用 atoi 將整理過的 C-string 轉成 int

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 31 Display 11.3 (1) Display 11.3 (2) Confirming Input 在 Display 11.3 , get_int 函式會 使用 read_and_clean 讀入輸入字元 允許使用者重複輸入,一直到滿意 read_and_clean 轉 出的數字為止

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 32 Section 11.1 Conclusion Can you Describe the benefits of reading numeric data as characters before converting the characters to a number? Write code to do input and output with C-strings? Use the atoi, atol, and atof functions? Identify the character that ends a C-string?