第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 指定字串的初值 8-3 指標與字串 8-4 字串處理 8-5 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 程式.
陣列與字串 Java陣列特性 一維陣列 多維陣列 字串 字串的相關函數 字串緩衝器類別.
基本輸入與輸出 王振生.
第8章 字串與陣列 8-1 一維陣列的處理 8-2 二維和多維陣列 8-3 字串處理 8-4 動態陣列、不規則陣列與參數傳遞
Chapter 5 迴圈.
資料結構 第2章 陣列.
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
13 C++字串 字串與數值轉換函數 13.1 C++字串類別 建立C++字串 13-2
第8章 字串與陣列.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
第5章 基本輸入與輸出 5-1 程式的輸入與輸出 5-2 字元與字串的輸入 5-3 字元與字串的輸出 5-4 格式化資料的輸入
Visual C++ introduction
JDK 安裝教學 (for Win7) Soochow University
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
String C語言-字串.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Java程式概觀.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Chapter 7 指標.
(Circular Linked Lists)
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Introduction to the C Programming Language
Ch10 字元與字串 物件導向程式設計(II).
Introduction to the C Programming Language
第3章 指標與字串 (Pointers and Strings)
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
Chapter 5 複合資料型態.
陣列(Array).
第5章 變數、常數與資料型態 [我的主控台程式]
|07 函數.
雲端計算.
輸入&輸出 函數 P20~P21.
第十章 指標.
第九章 字串.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
程式設計 博碩文化出版發行.
第7章 指標 7-1 指標的基礎 7-2 指標變數的使用 7-3 指標運算 7-4 指標與陣列 7-5 指向函數的指標.
挑戰C++程式語言 ──第8章 進一步談字元與字串
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
C qsort.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
第14章 結構與其他資料形式.
函數應用(二)與自定函數.
陣列與結構.
10115: Automatic Editing ★★☆☆☆
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
簡單Java介紹.
實習八 函式指標.
1757: Secret Chamber at Mount Rushmore
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
Programming & Language Telling the computer what to do
Chapter 6 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Unix指令4-文字編輯與程式撰寫.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 指定字串的初值 8-3 指標與字串 8-4 字串處理 8-5 C語言的字串函數

8-1 C語言的字元檢查函數-1

8-1 C語言的字元檢查函數-2

8-2 指定字串的初值-說明 C語言並沒有字串資料型態,字串是一種字元型態的陣列,只是使用’\0’字串結束字元標示字串的結束。在其它程式語言,例如:BASIC、FORTAN和Java語言都擁有專屬的字串資料型態。

8-2 指定字串的初值-字串的初值1 字串的初值相當於指定C語言字元陣列的初值。例如:宣告擁有15個元素的字元陣列,如下: char str[15] = "hello, world\n"; 程式碼是一個字元陣列,使用「"」雙引號的字串常數指定陣列初值,此時字元陣列的圖例,如下圖所示:

8-2 指定字串的初值-字串的初值2 還有另外2種方法:第2種是使用陣列初值,如下所示 char str[15] = {'h','e','l','l','o',',',' ','w','o','r','l','d','\n','\0'}; 第3種方法是使用指定敘述指定字元陣列各元素的值,如下所示: char str[15]; str[0] = 'h'; str[1] = 'e'; str[2] = 'l'; str[3] = 'l'; str[4] = 'o'; str[5] = ','; str[6] = ' '; str[7] = 'w'; str[8] = 'o'; str[9] = 'r'; str[10] = 'l'; str[11] = 'd'; str[12] = '\n'; str[13] = '\0';

8-2 指定字串的初值-指定敘述 C語言的字串是字元陣列,並不能使用指定敘述將字串指定給其它的字元陣列。例如:宣告字元陣列str1,其大小也是15,如下所示: char str1[15]; 字串只能在宣告時使用字串常數指定字串內容。 如果需要指定字串常數或將其它字串指定給str1,使用的是標準函式庫<string.h>標頭檔的strcpy()函數,如下所示: strcpy(str1, "hello\n"); strcpy(str1, str);

8-3 指標與字串 8-3-1 指標與字串 8-3-2 字串的指標陣列 8-3-3 main主程式的命令列參數字串 8-3-4 函數傳回字串指標

8-3-1 指標與字串-說明 字串指標是一個char資料型態的指標,可以用來指向字元陣列或字串常數。首先宣告字元陣列的字串,如下所示: char str[15] = "This is a book."; 接著宣告指標變數指向此字串,如下所示: char *ptr = str;

8-3-1 指標與字串-指向字串常數 指標變數也可以用來指向字串常數,如下所示: char *ptr1; ptr1 = "This is a pen."; 程式碼宣告指標變數ptr1指向字串常數,當然指標變數可以隨時改成指向其它字串,例如:str1是一個字元陣列的字串,如下所示: ptr1 = str1;

8-3-1 指標與字串-複製字串 將字串str的內容複製到字串str1,指標變數ptr是指向str,ptr1是指向str1,複製的迴圈,如下: while ( *ptr != '\0' ) { *(ptr1+i) = *ptr++; i++; } *(ptr1+i) = '\0'; while迴圈的條件是檢查是否到了str字串的結束字元,ptr1和ptr指標變數分別使用加法和遞增運算移到下一個字元,最後在ptr1加上結束字元'\0',就可以將字串str複製到str1。

8-3-2 字串的指標陣列-說明 C語言的指標陣列最常應用在字串的指標陣列,如下所示: 上述程式碼宣告字串的指標陣列name且指定初值。 #define ROWS 4 char *name[ROWS] = {"陳會安", "江小魚", "張無忌", "楊過"}; 上述程式碼宣告字串的指標陣列name且指定初值。

8-3-2 字串的指標陣列-圖例

8-3-2 字串的指標陣列-交換字串

8-3-2 字串的指標陣列-顯示指標陣列 在指標陣列取得每一個元素的字串,只需使用指標變數指向各元素,如下所示: ptr = name[i]; 程式碼可以取得指定元素的字串指標,然後使用指標運算顯示字串內容,如下: for ( j = 0; *(ptr+j) != '\0'; j++) printf("%c", *(ptr+j)); printf("]\n");

8-3-3 main主程式的命令列參數字串-說明 C程式執行的進入點是main()主程式,換句話說,程式是從程式檔案的main()主程式開始執行,main()主程式擁有2個參數分別是整數和字串的指標陣列,如下所示: main(int argc, char *argv[]) { …… } main()主程式擁有2個參數,第1個參數是命令列參數的個數,第2個參數char *argv[]是指標陣列,每一個陣列元素指向一個字串。

8-3-3 main主程式的命令列參數字串-傳遞參數 在「命令提示字元」視窗可以使用主程式的參數傳遞執行時的命令列參數,如下所示: D:\C++\Ch08>Ch8-3-3.exe 1 2 3 4 Test Enter 命令列輸入1、2、3、4和Test共5個參數,以空白字元分隔,main()主程式取得的第1個參數值是6,因為命令列輸入的程式執行檔Ch8-3-3.exe本身也算1個參數,所以為5+1=6。

8-3-3 main主程式的命令列參數字串-取得參數值 第2個參數使用argv[0]、argv[1]、argv[2]、argv[3]、argv[4]和args[5]陣列元素依序取得參數字串,如下所示: argv[0] = "Ch8-3-3.exe" argv[1] = "1" argv[2] = "2" argv[3] = "3" argv[4] = "4" argv[5] = "Test"

8-3-4 函數傳回字串指標 C語言的函數傳回值也可以是字串指標,不過因為指標是指向其它變數的位址,傳回值不可以是在函數程式區塊中宣告的自動變數,只可以是函數的傳址參數或是static靜態變數,如下所示: char *strcopy(char *, char *); char *monthname(int); 函數原型宣告都是傳回字元型態的指標變數,第1個是傳回傳址的參數,第2個傳回static靜態變數。

8-4 字串處理 8-4-1 取得字串長度 8-4-2 字串複製 8-4-3 字串連結 8-4-4 字串比較 8-4-5 子字串的搜尋

8-4-1 取得字串長度 字串是一個字元陣列,計算字串長度的方法就是一維陣列走訪和指標的遞增運算,如下所示: for ( i = 0; str[i]!='\0'; i++ ); for迴圈會執行到陣列元素為'\0'為止,此時變數i就是字串長度。指標版本是使用指標遞增運算,如下所示: char *ptr = str; while ( *ptr != '\0' ) ptr++; return ptr - str;

8-4-2 字串複製 字串複製是將字串內容複製到其它的字元陣列,其目的是為了保留原始字串,以避免執行其它字串處理時,更改到原始字串的內容。 char *ptr = dest; while ( (*ptr++=*source++) != '\0' ); return dest; 陣列版本的字串複製也是使用類似的while迴圈,如下所示: while ((dest[i]=source[i]) != '\0') i++;

8-4-3 字串連結-說明 字串的連結是將兩個字串結合成一個字串。例如:兩個字串的結合範例,如下所示:

8-4-3 字串連結-陣列版函數 陣列版本的實作是字串複製和字串長度函數的結合,只需使用字串長度的迴圈找到字串結束字元的索引,如下所示: for ( i = 0; dest[i] != '\0'; i++); 接著就可以開始複製字串,如下所示: while ( source[j] != '\0' ) { dest[i+j] = source[j]; j++; }

8-4-3 字串連結-指標版函數 指標版本也一樣是字串長度和複製函數結合,如下所示: while ( *ptr++ != '\0' ); 程式碼使用while迴圈走訪到字串的最後一個的結束字元,然後就使用迴圈複製字串,如下所示: while ( (*ptr++=*source++) != '\0' );

8-4-4 字串比較-說明 字串的比較是比較兩個字串的內容,如果兩個字串完全相同的話,就傳回0。如果不相同,使用ASCII的字元碼比較不同的那一個字元。

8-4-4 字串比較-函數 字串比較函數是使用迴圈從頭開始比較兩個字串中的每一個字元,直到字元不相等或字串結束字元,如下所示: for ( i = 0; source[i] == target[i]; i++) if ( source[i] == '\0') return 0; 如果不相等,接著就比較最後不相等的兩個字元,以決定字串的大小,如下所示: if ((source[i]-target[i]) < 0 ) return -1; else return 1;

8-4-5 子字串的搜尋-說明 子字串的搜尋是指在原始字串中找尋某特 定字串是否存在,如果存在,這個特定字 串就是原始字串的子字串。

8-4-5 子字串的搜尋-函數 字串搜尋是字串比較的延伸,因為原始字串的任何一個字元都可能是特定字串的開始,函數需要使用二層的巢狀迴圈執行字串比較,如下所示: for ( i = 0; source[i] != '\0'; i++ ) { for (j = i, k = 0; target[k] != '\0' && source[j] == target[k]; j++, k++ ); if ( k > 0 && target[k] == '\0') return i; } return -1;

8-5 C語言的字串函數 8-5-1 字串轉換函數 8-5-2 字串處理

8-5-1 字串轉換函數

8-5-2 字串處理-1

8-5-2 字串處理-2