第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串

Slides:



Advertisements
Similar presentations
学年度工作总结 —— 上海建桥学院 —— 上海建桥学院 实验室与资产管理处 实验室与资产管理处.
Advertisements

软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
电子成绩单项目实现.
第1单元 操作系统概论 第一节 绪论 操作系统定义.
四資二甲 第三週作業 物件導向程式設計.
第九章 字串 (String).
年度校樹選拔秀 主辦單位:楊梅國小.
補充: Input from a text file
基于操作系统的编程复习 张玉宏
计算机基础与实训教材系列 《电脑办公自动化实用教程》.
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
主讲教师:吴琼 微信群:C语言2016 QQ群: 密码scu2016 昵称:“真名+学号”
函數 授課:ANT 日期:2009/3/24.
程序设计II 第三讲 字符串处理.
C 程式設計— 指標.
函數 授課:ANT 日期:2011/3/28.
搜尋資料結構 Search Structures.
C 程式設計— 指標 台大資訊工程學系 資訊系統訓練班.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
Introduction to the C Programming Language
Introduction to the C Programming Language
程式設計實作.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
程序设计期末复习 黎金宁
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
程式撰寫流程.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
C语言程序设计 李祥.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
C语言 程序设计基础与试验 刘新国、2012年秋.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
THE C PROGRAMMING LANGUAGE
字符串和字符数组 字符串的输入和输出 字符串的基本操作
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第10章 檔案與資料夾處理 10-1 C語言的檔案輸入與輸出 10-2 文字檔案的讀寫 10-3 二進位檔案的讀寫
第9章 文件操作 文件 使用文件的目的 操作系统管理数据的基本单位 存储在外存储器上的数据的集合
第十章 指针.
数组 梁春燕 华电信息管理教研室.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C语言概述 第一章.
计算机组装、维修及 实训教程 第17章 微机软件的安装与设置 2019年4月11日星期四.
第3章 變數、算術運算、 數學函數及輸入輸出.
C语言复习3----指针.
函式庫補充資料.
Oop8 function函式.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
C標準輸出入函數庫 與 作業系統.
輸出與輸入(I/O).
第2章 认识C语言 教学要点 2. 1 项目二C语言程序识读 2 .2 项目三班级成绩排名 2 .3 知识链接 返回.
C程序设计.
第4章 数 组.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
挑戰C++程式語言 ──第9章 函數.
实验二:添加Linux系统调用及熟悉常见系统调用
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
Oop7 字串 String.
Introduction to the C Programming Language
第6章 嵌入式软件开发基础.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
字串 第10章 part I 8/30/2019.
變數與資料型態  綠園.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串 8-5 指標的應用 - 字串處理 8-6 標準函式庫的字串函數

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

8-1 C語言的字元檢查函數-2 在<ctype.h>標頭檔提供2個函數可以轉換英文字母的大小寫,如下表所示:

8-2 C語言的字串 8-2-1 字串的基礎 8-2-2 字串的初值與指定敘述

8-2-1 字串的基礎-說明 C語言的「字串」(String)是一維的字元陣列,也就是由字元資料型態組成的陣列結構。例如:宣告一個字元陣列來儲存字串,其宣告的方式,如下所示: char string[80]; 程式碼宣告長度為80的字元陣列,陣列名稱是string,陣列索引是從0開始,換言之,存取陣列元素是使用string[0]、string[1]~string[79]來存取,如下所示: char c; string[i] = c;

8-2-1 字串的基礎-結束字元 在字元陣列的結束需要加上'\0'字元當作結束字元,如下所示: string[LEN] = '\0'; 上述擁有結束字元的字元陣列是一個字串,其長度是從0到結束字元前為止的字元數,即LEN。

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

8-2-2 字串的初值與指定敘述-字串的初值2 使用陣列初值,如下所示 char str[15] = {'h','e','l','l','o','!',' ','w','o','r','l','d','\n','\0'}; 使用指定敘述指定字元陣列的元素值,如下所示: 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-2 字串的初值與指定敘述-字串的指定敘述 C語言的字串是一種字元陣列,並不能使用指定敘述將字串指定給其它字元陣列。 如果在程式碼需要更改字串內容,例如:指定字串常數或將其它字串指定給str1,需要使用C語言標準函式庫<string.h>標頭檔的strcpy()函數,如下所示: strcpy(str1, “hello\n”); strcpy(str1, str);

8-3 字串的輸入與輸出 8-3-1 讀取與輸出字串 8-3-2 使用scanf()函數讀取字串 8-3-3 使用getchar()讀取整個字串

8-3-1 讀取與輸出字串-讀取 在C程式可以使用gets()函數從標準輸入裝置讀取整行文字內容的字串,函數是使用緩衝區讀取資料,所以需要等到使用者按下Enter鍵後,才會將字串送給C程式處理,如下所示: char line[80]; gets(line); 程式碼宣告字元陣列line[],大小是80個字元,然後以字元陣列為參數讀取字串內容,傳回值是字元陣列的指標,也就是字串內容。

8-3-1 讀取與輸出字串-輸出 在輸入字串後,C程式可以使用puts()函數將字串輸出到螢幕顯示,如下所示: puts(line); 上述程式碼可以將參數的字元陣列line[]輸出到螢幕顯示,並且在字串後自動加上新行字元。

8-3-2 使用scanf()函數讀取字串 在C程式除了使用gets()函數取得使用者輸入的字串外,我們也可以使用scanf()函數讀取使用者輸入的字串,如下所示: scanf("%s", line); 上述程式碼的函數參數一共有2個,第1個是格式字串,內含%s表示輸入的資料格式是字串,第2個參數是儲存讀取字串的變數,line是一個字元陣列,因為C語言的陣列名稱本身是位址,所以不需要「&」取址運算子。

8-3-3 使用getchar()讀取整個字串 我們可以使用for迴圈配合getchar()函數來摸擬gets()函數的功能,如下所示: for ( i = 0; (c=getchar()) !=EOF && c != '\n'; i++) line[i] = c; line[i] = '\0'; 程式碼for迴圈的第2部分先呼叫getchar()函數讀取一個字元(c=getchar()),然後檢查輸入字元是否為EOF或Enter鍵,在命令列提示字元按下Ctrl-Z組合鍵是EOF,如果不是,就將字元存入陣列中,最後在字元陣列的最後加上'\0'的字串結束字元。

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

8-4-1 指標與字串-說明 字串指標是char資料型態的指標,可以用來指向字元陣列或字串常數。首先宣告一維字元陣列的字串,如下所示: char str[16] = "This is a book."; 上述字元陣列是一個字串且指定初值,接著可以宣告指標變數指向此字串,如下所示: char *ptr = str; 上述程式碼宣告char資料型態的指標變數ptr,指向陣列名稱str,也就是字串第1個字元的位址,如下圖所示:

8-4-1 指標與字串-指向字串常數 當然,指標變數也可以用來指向字串常數,如下所示: char *ptr1; ptr1 = "This is an apple."; 程式碼宣告指標變數ptr1指向字串常數,當然指標變數可以隨時更改指向的字串。 例如:str1是另一個字元陣列的字串,我們可以將指標變數ptr1改為指向str1字串,如下所示: ptr1 = str1;

8-4-1 指標與字串-複製字串 例如:將字串str的內容複製到字串str1,指標變數ptr是指向str,ptr1是指向str1,複製字元的while迴圈,如下所示: while ( *ptr != '\0' ) { *(ptr1+i) = *ptr++; i++; } *(ptr1+i) = '\0';

8-4-2 字串的指標陣列-指標陣列 C語言的指標陣列最常用來建立字串的指標陣列,如下所示: #define ROWS 4 char *name2[ROWS] = {"陳會安", "江小魚", "楊過", "小龍女"};

8-4-2 字串的指標陣列-二維陣列 同樣的,我們也可以宣告二維陣列name1[][]儲存上述4個字串,如下所示: #define ROWS 4 #define COLUMNS 10 char name1[ROWS][COLUMNS] = {"陳會安", "江小魚", "楊過", "小龍女"};

8-4-2 字串的指標陣列-交換字串 當程式使用指標陣列儲存字串時,不只比較節省記憶空間,而且因為是指標,如果指標陣列的元素需要交換字串,只需更改指標指向的字串即可,如下圖所示:

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

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

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

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

8-5 指標的應用 - 字串處理 8-5-1 取得字串長度 8-5-2 字串連結 8-5-3 字串比較

8-5-1 取得字串長度 字串是一個字元陣列,我們可以使用指標遞增運算計算字串長度,如下所示: char *ptr = str; while ( *ptr != '\0' ) ptr++; return ptr - str; 程式碼使用while迴圈走訪到字串的最後1個字元,然後使用ptr-str指標減法運算取得字串長度。

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

8-5-2 字串連結-實作 連結函數的實作是結合字串複製和字串長度計算,首先使用字串長度的while迴圈,如下所示: while ( *ptr++ != '\0' ); ptr--; 程式碼使用while迴圈走訪到字串的最後1個的結束字元,ptr--指向結束字元的前一個字元,然後使用另一個while迴圈複製字串,如下所示: while ( (*ptr++=*source++) != '\0' );

8-5-3 字串比較-比較迴圈 字串的比較是比較2個字串的內容,如果2個字串完全相同的話,就傳回0。如果不相同,使用ASCII的字元碼比較不同的哪一個字元。 字串比較函數使用for迴圈從頭比較2個字串中的每一個字元,直到字元不相等或字串結束字元,如下所示: for ( ; *source == *target; source++, target++) if ( *source == '\0') return 0;

8-5-3 字串比較-比較不相等的字元 如果不相等,接著就使用if條件比較最後不相等的2個字元,以決定字串大小,如下所示: if ( (*source-*target) < 0 ) return -1; else return 1; 上述if條件比較最後2個字元,*source>*target傳回1,*source<*target傳回-1。

8-6 標準函式庫的字串函數 8-6-1 字串轉換函數 8-6-2 字串處理

8-6-1 字串轉換函數 在<stdlib.h>標頭檔定義一些數值轉換的工具函數,函數的說明如下表所示:

8-6-2 字串處理