深度學習C++ Chapter 7 簡易字串 深度學習 C++ 簡易字串.

Slides:



Advertisements
Similar presentations
資料坐火車 …… 談陣列 (Array) 綠園 2008/12/15. Array 的宣告 整數陣列的宣告  int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1]
Advertisements

綠園 2012/11/06. Array 的宣告 整數陣列的宣告 int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1] student[4] student[2]
綠園 2012/11/06. Array 的宣告 整數陣列的宣告 int student[5]; 意義:宣告了 5 個 int 大小的連續空間,名稱 為 student ,沒有預設值,則為系統殘值。 student student[0] student[1] student[4] student[2]
第一單元 建立java 程式.
計算機程式語言實習課.
电子成绩单项目实现.
第九章 字串 (String).
File Access 井民全製作.
第六讲 指针与字符串 —— 为什么指针 —— 持久动态内存分配 —— 字符串(字符数组).
資料結構 第2章 陣列.
13 C++字串 字串與數值轉換函數 13.1 C++字串類別 建立C++字串 13-2
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
第5章 基本輸入與輸出 5-1 程式的輸入與輸出 5-2 字元與字串的輸入 5-3 字元與字串的輸出 5-4 格式化資料的輸入
簡易C++除錯技巧 長庚大學機械系
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 指定字串的初值 8-3 指標與字串 8-4 字串處理 8-5 C語言的字串函數.
程序设计II 第三讲 字符串处理.
String C語言-字串.
Java程式概觀.
Introduction to the C Programming Language
C語言簡介 日期 : 2018/12/2.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
Introduction to the C Programming Language
Ch10 字元與字串 物件導向程式設計(II).
C++程序设计 string(字符串类) vector(容器类).
Introduction to the C Programming Language
第3章 指標與字串 (Pointers and Strings)
字符串和字符数组 字符串的输入和输出 字符串的基本操作
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
Chapter 5 複合資料型態.
数组 梁春燕 华电信息管理教研室.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
雲端計算.
輸入&輸出 函數 P20~P21.
第十章 指標.
2011 邀请中国姐妹学校韩国语研修团项目 申请时间: ~5月 27日 / 项目地点: 汉阳大学 安山校区 / 项目时间: (星期日) ~ 7.22(星期五) 费用: 100万元(韩币/人 (包含项目 - 学费, 教材费, 宿舍费, 接机费用及所有文化体验活动项目费用)
第九章 字串.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
挑戰C++程式語言 ──第8章 進一步談字元與字串
函式庫補充資料.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
C qsort.
C程序设计.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
第14章 結構與其他資料形式.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
陣列與結構.
10115: Automatic Editing ★★☆☆☆
字 串 9 子曰:「質勝文則野,文勝質則史。 文質彬彬,然後君子。」 《論語﹒雍也第六》
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
實習八 函式指標.
1757: Secret Chamber at Mount Rushmore
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
Oop7 字串 String.
Introduction to the C Programming Language
Programming & Language Telling the computer what to do
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
Unix指令4-文字編輯與程式撰寫.
InputStreamReader Console Scanner
Presentation transcript:

深度學習C++ Chapter 7 簡易字串 深度學習 C++ 簡易字串

傳統字串 固定長度的字元陣列 字串末尾字元為空字元(’\0’) 字串長度為空字元之前的所有字元個數 字元陣列長度一定要多於字串長度加一 C-style string 深度學習 C++ 簡易字串

傳統字串的設定 陣列長度為 20,字串長度為 3,用了 4 個字元 陣列長度為 20,字串長度為 9,用了 10 個字元 陣列長度為 4,字串長度為 3,字元總數為 4 字串長度為 4,但字元總數為 5,d 為常字串  char a[20] = { ’c’ , ’a’ , ’t’ , ’\0’ } ; char b[20] = ”123456789” ; char c[] = ”dog” ; char *d = ”fish” ; // a 為字串,第四個字元之後都是空字元 char a[20] = { ’c’ , ’a’ , ’t’ } ; // b 不是字串,為 3 個字元的字元陣列 char b[3] = { ’c’ , ’a’ , ’t’ } ; 深度學習 C++ 簡易字串

常字串與字元陣列 (一) 常字串內的資料不能在程式執行中被更改 若要更改字串,則須以字元陣列方式儲存字串 // 錯誤 // 正確 char *foo = ”fish” ; foo[0] = ’F’ ; 可在 char 之前使用 const 加以突顯常字串的常數特性 const char *foo = ”fish” ; char bar[] = ”fish” ; bar[0] = ’F’ ; // 正確 深度學習 C++ 簡易字串

常字串與字元陣列 (二) 指向常字串的指標,在執行中可隨時指向其他位址 字元陣列在執行中不可指向其他位址 char *a = ”horse” ; char *b = ”fish” ; a = b ; // 指標 a 指向常字串 horse // 指標 b 指向常字串 fish // 指標 a 指向指標 b 所指的位址,即指向 fish 以上的常字串 ”horse” 會因此失去連結,永遠無法為程式內的其他式子所使用 char a[] = ”horse” ; char b[] = ”fish” ; a = b ; // 字串陣列 a 存有 horse\0 // 字串陣列 b 存有 fish\0 // 錯誤 string literal 深度學習 C++ 簡易字串

常字串與中文字串 常字串可以使用 ’\’ 來斷行 常字串也可使用分號分開連結 中文字串:每個中文字以兩個字元代表。字串長度為中文 字數的兩倍 常字串可以使用 ’\’ 來斷行 常字串也可使用分號分開連結 中文字串:每個中文字以兩個字元代表。字串長度為中文       字數的兩倍 char *foo = ”123\ 456\ 7890” ; foo 指向 ”123 4567890” char foo[] = ”123” ”456” ; foo 儲存 ”123456” // 陣列長度為 19,字串長度 18 char foo[] = ”月明星稀,烏鵲南飛” ; 深度學習 C++ 簡易字串

常犯的錯誤字串設定 常犯錯誤的字串設定 如果使用字元指標設定,可能會造成字串失去連結 // 錯誤 foo 為字元陣列 // 錯誤 a 為陣列 // 錯誤 a 為陣列且長度不足 char foo[5] ; foo = ”tiger” ; foo = ”crocodile” ; char a[10] , b[10] , c[20] ; … a = b ; a = c ; // 正確     // 正確 但原有的 ”tiger” 就失去連繫 char *p ; p = ”tiger” ; p = ”cat” ; char *r = ”sheep” ; char *s = ”dog” ; r = s ; // 正確 但原有的 ”sheep” 就失去連繫 深度學習 C++ 簡易字串

字元陣列的輸入與輸出 (一) 字串的輸入 字串的輸出 字串只能存入字元陣列內,且字串長度須比字元陣列長度少一個字元,以供空字元所使用 若要輸出字串,僅須使用字元陣列名稱或字元指標即可。 此時顯示的字元為空字元之前的所有字元 char a[20] ; cin >> a ; cout << a << endl; // 輸入最多 19 個字元      // 輸出在空字元之前的所有字元 深度學習 C++ 簡易字串

字元陣列的輸入與輸出 (二) 字串輸出的寬度可以使用 setw 設定 若字元陣列缺少空字元,則輸出的字元總數通常會超出陣列的字元總數 #include <iomanip> … char a[10] ; cin >> a ; cout << setw(15) << a << endl ; char a[3] = {’c’ , ’a’ , ’t’} ; cout << a << endl ; // a 不是字串 // 語法正確但輸出錯誤 深度學習 C++ 簡易字串

使用字元指標輸入與輸出 字元指標可以用來指向字元陣列,有時也可以用來輸出字串。字元指標並沒有任何記憶空間用來儲存輸入的字元資料 char a[20] = ”horse” ; char *p = a ; cout << p << endl ; // 指標指向字元陣列 a // 列印:horse cin >> p ; cout << p << endl ; // 輸入一長度小於等於 19 的字串 // 列印輸入的字串 char *q ; cin >> q ; cout << q << endl ; // 定義新字元指標 // 錯誤:q 沒有分配任何記憶空間 深度學習 C++ 簡易字串

字元陣列的操作 (一) 傳統字串可以使用下標改變字元資料 將字串的資料分開列印 計算字串長度 字串長度可以使用於 string.h 標頭檔內的 strlen 函式求得 char a[20] = ”startrek” ; for ( int i = 0 ; a[i] != ’\0’ ; ++i ) cout << a[i] << ” ” ; char foo[50] = ”暮春三月,江南草長” ; int len = 0 ; while( foo[len] != ’\0’ ) ++len ; cout << ”字串長度 :” << len << endl ; // 字串長度 :18 #include <string.h> … cout << ”字串長度 :” << strlen(”borg”) << endl ; // 印出 4 深度學習 C++ 簡易字串

字元陣列的操作 (二) 將字串內的小寫字母改成大寫 以上若使用 則程式將會產生執行錯誤,原因為字元指標所指向的字串為常字串 char p[] = ”The Lord of The Rings” ; for ( int i = 0 ; p[i] != ’\0’ ; ++i ) { if ( p[i] >= ’a’ && p[i] <= ’z’ ) p[i] = p[i] – ’a’ + ’A’ ; } cout << p << endl ; // 輸出:THE LORD OF THE RINGS char *p = ”The Lord of The Rings” ; 則程式將會產生執行錯誤,原因為字元指標所指向的字串為常字串 深度學習 C++ 簡易字串

傳統字串合併 字串合併 依次複製兩字串的所有非空字元到新字元陣列,最後再補上一個空字元 錯誤方式 c = a + b ; 正確方式 char a[] = ”暮春三月” ; char b[] = ”江南草長” ; char c[100] ; int i , j ; for ( i = 0 ; a[i] != ’\0’ ; ++i ) c[i] = a[i] ; for ( j = 0 ; b[j] != ’\0’ ; ++j ) c[i+j] = b[j] ; c[i+j] = ’\0’ ; 深度學習 C++ 簡易字串

字串 (String)-常用的String Library Function C語言提供很多字串庫存函數,這些都存在string.h標頭檔裡 名稱 寫法 用途 strcat ( ) strcat(str1,str2) 將str2串接在str1之後 strncat ( ) strncat(str1,str2,n) 將str2的前面n個字元,串接在str1之後 strcpy ( ) strcpy(str1,str2) 將一個str2 複製到另一str1中 strncpy strncpy(str1,str2,n) 將str2前面 n個字元複製至str1字串 strcmp( ) strcmp(str1,str2) 將str1和str2由左至右依序比較其字元(根據ASCII值), 傳回一個函數值: 函數值<0str1<str2 函數值=0str1=str2 函數值>0str1>str2 strlen( ) strlen(str1) 傳回str1的長度(含空白字元,但不含結束字元\0) Go Go Go Go 一.字串連結:strcat ; strncat 二.字串複製:strcpy ; strncpy 三.字串比較:strcmp 四.字串長度:strlen 五.字串搜尋:strchr ; strstr Go Go

字串(String)-常用的String Library Function 範例四: strcat( ) #include<stdio.h> #include<string.h> main( ) { int i; char s1[40]="abcde"; char s2[40]="fghijk"; strcat(s1,s2); printf("The new string are=%s\n",s1); } s1 a b c d e \0 s2 f g h i j k \0 檔名 : S4.c 一.執行結果: The new string are=abcdefghijk 二.s1先去掉尾端的Null Character(‘\0’),再加上s2. s1 a b c d e f g h i j k \0

字串(String)-常用的String Library Function #include<stdio.h> #include<string.h> main( ) { int i; char s1[40]="abcde"; char s2[40]="fghijk"; strncat(s1,s2,3); printf("The new string are=%s\n",s1); } s1 a b c d e \0 s2 f g h i j k \0 檔名 : S5.c 一.執行結果: The new string are=abcdefgh 二.s1先去掉尾端的Null Character(‘\0’),再加上s2前三個字元. s1 a b c d e f g h \0

字串(String)-常用的String Library Function #include<stdio.h> #include<string.h> main( ) { int i; char s1[40]="abcde"; char s2[40]="fghijk"; strcpy(s1,s2); printf("The new string are=%s\n",s1); } s1 a b c d e \0 s2 f g h i j k \0 檔名 : S6.c 一.執行結果: The new string are=fghijk 二.將s2複製至s1中. s1 f g h i j k \0

字串(String)-常用的String Library Function #include<stdio.h> #include<string.h> main( ) { int i; char s1[40]="abcde"; char s2[40]="fghijk"; strncpy(s1,s2,3); printf("The new string are=%s\n",s1); } s1 a b c d e \0 s2 f g h i j k \0 檔名 : S7.c 一.執行結果: The new string are=fghde 二.將s2前三個字元複製至s1前三個字元中. s1 f g h d e \0

字串(String)-常用的String Library Function #include<stdio.h> #include<string.h> main( ) { int i,p; char s1[40]="abcde"; char s2[40]="fghijk"; p=strcmp(s1,s2); printf("strcmp(s1,s2)=%d\n",p); } s1 a b c d e \0 s2 f g h i j k \0 檔名 : S8.c 一.執行結果: strcmp(s1,s2)= -1 二.s1<s2,所以傳回值是負數 a(97) < f(102) => -1

字串(String)-常用的String Library Function #include<stdio.h> #include<string.h> main( ) { int i,p,q; char s1[40]="abcde"; char s2[40]="fghijk"; p=strlen(s1); q=strlen(s2); printf("s1=%d;s2=%d\n",p,q); } 檔名 : S9.c 執行結果: s1=5,s2=6

C++ 字串 C++ 字串為一可自動調整字元長度的字元陣列, 字串長度沒有限制 C++ 字串長度就是真正的字元長度 C++ 字串末尾無空字元 須加入 string 標頭檔 C++-style string 深度學習 C++ 簡易字串

C++ 字串物件 字串物件 字串物件陣列 string a ; // a 字串沒有任何字元 string b(5 , ’z’); string c = ”cat” ; // c 字串有 3 個字元,分別為’c’ ’a’ ’t’ string d(”cat”) ; // d 字串同上 string e = ’a’ ; // 錯誤,需改成 e = ”a” 字串 string f = d ; // f 字串與 d 字串相同 string a[10] ; // 10 個 C++ 字串元素所構成的字串陣列 深度學習 C++ 簡易字串

C++ 字串物件的輸入與輸出 直接使用 cin 輸入與 cout 輸出 簡單回聲 (echo) 程式 早期的 C++ 編譯器無法列印 C++ 字串,此時可以使用 .c_str() 讓此 C++ 字串以傳統字串方式輸出 string in ; while ( 1 ) { cin >> in ; cout << in << endl ; } string foo = ”tiger” ; cout << foo.c_str() << endl ; 深度學習 C++ 簡易字串

簡單 C++ 字串操作 (一) 字串指定: = 字串合成: + , += + 與 += 的右側也可以是字元 string foo ; foo = foo + ”臥龍” ; // foo 的末尾加上一字串 foo += ”臥龍” ; // 相當於 foo = foo + ”臥龍” foo = ”孔明” + ”諸葛亮” ; // 錯誤,加法的兩側至少 // 要有一個為 C++ 字串 深度學習 C++ 簡易字串

簡單 C++ 字串操作 (二) 字串長度:.size() 或 .length() 字元讀取與更改:[] 產生傳統字串:.c_str() cout << foo.length() << endl ; string foo = ”tiger” ; for ( int i = 0 ; i < foo.size() ; ++i ) { cout << foo[i] << ’ ’ ; } string foo = ”cat” ; cout << ”> 傳統字串:” << foo.c_str() << endl ; cout << ”> C++ :” << foo << endl ; 深度學習 C++ 簡易字串

字串陣列 (一) 字串陣列:陣列的元素為字串 1. 陣列有五個字串,每個字串有四個字元 2. 陣列有五個常字串,每個字串的大小由初始字串決定 3. 同上,但字串的個數由編譯器自己核算 4. 陣列字串個數由初始陣列的元素決定,每個字串的長度由初始字串決定 5. 陣列有五個 C++ 字串 char weekday[5][4] = {”mon”,”tue”,”wed”,”thu”,”fri”}; char * weekday[5] = {”mon”,”tue”,”wed”,”thu”,”fri”}; char * weekday[] = {”mon”,”tue”,”wed”,”thu”,”fri”}; char ** weekday = {”mon”,”tue”,”wed”,”thu”,”fri”}; string weekday[5] = {”mon”,”tue”,”wed”,”thu”,”fri”}; 深度學習 C++ 簡易字串

字串陣列 (二) 之前的 2. 3. 4. 等三種字串陣列的字串都是常字串 (string literal),無法在程式中加以改變字串內容 char * weekday[5] = { ”mon” , ”tue” , ”wed” , ”thu” , ”fri”} ; weekday[1][0] = ’T’ ; // 錯誤,無法將 ’t’ 改成 ’T’ 深度學習 C++ 簡易字串

字串陣列 (三) 修改字串陣列的元素 使用向量陣列儲存字串 char weekday[5][4] = {”mon”,”tue”,”wed”,”thu”,”fri”} ; for ( i = 0 ; i < 5 ; ++i) weekday[i][0] += ’A’ - ’a’ ; for ( i = 0 ; i < 5 ; ++i) cout << weekday[i] << ’ ’ ; int no ; cin >> no ; vector<string> foo(no) ; // 向量陣列內有 no 個 C++ 字串 // 將陣列內每個字串元素都複製成一樣 for( i = 0; i < 5; ++i) foo[i] = ”明月松間照,清泉石上流” ; 深度學習 C++ 簡易字串

字幕顯示器:跑馬燈 將輸出的文字以跑馬燈的方式顯示 使用 sleep() 函式讓程式暫時若干時間 使用 ’\r’ 字元讓游標重回同一行的第一個字元處 使用 flush 讓要輸出的資料立即顯示在螢幕 程式 輸出 深度學習 C++ 簡易字串

字串分解 分解長字串內的字 原字串: 分解成: ”Must you be so linear, Jean-Luc” 程式 輸出 深度學習 C++ 簡易字串

點矩陣文字字串 將輸入字串內的字元以點矩陣方式呈現 輸出: **** **** *** *** ** * * * * * * * * 輸入:ZEBRA 輸出: **** **** ***  ***   **    * *    *  * *  * *  *   *  ***  ***  ***  ****  *   *    *  * * *  *  * **** **** ***  *  * *  * 程式 輸出 深度學習 C++ 簡易字串