Introduction to the C Programming Language

Slides:



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

第一單元 建立java 程式.
第九章 字串 (String).
補充: Input from a text file
File Access 井民全製作.
第六讲 指针与字符串 —— 为什么指针 —— 持久动态内存分配 —— 字符串(字符数组).
資料結構 第2章 陣列.
第六章 数 组 主讲教师 贾月乐 联系电话:
第十一章 結構.
13 C++字串 字串與數值轉換函數 13.1 C++字串類別 建立C++字串 13-2
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
Visual C++ introduction
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 指定字串的初值 8-3 指標與字串 8-4 字串處理 8-5 C語言的字串函數.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
程序设计II 第三讲 字符串处理.
String C語言-字串.
Introduction to the C Programming Language
Introduction to the C Programming Language
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
Java程式概觀.
Introduction to the C Programming Language
C語言簡介 日期 : 2018/12/2.
Introduction to the C Programming Language
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
Introduction to the C Programming Language
第3章 指標與字串 (Pointers and Strings)
Java 程式設計 講師:FrankLin.
字符串和字符数组 字符串的输入和输出 字符串的基本操作
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
Chapter 5 複合資料型態.
数组 梁春燕 华电信息管理教研室.
輸入&輸出 函數 P20~P21.
第十章 指標.
第九章 字串.
深度學習C++ Chapter 7 簡易字串 深度學習 C++ 簡易字串.
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
挑戰C++程式語言 ──第8章 進一步談字元與字串
函式庫補充資料.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
C qsort.
C程序设计.
第4章 数 组.
Introduction to the C Programming Language
挑戰C++程式語言 ──第7章 輸入與輸出.
第14章 結構與其他資料形式.
陣列與結構.
Introduction to the C Programming Language
實習八 函式指標.
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
第四章 陣列、指標與參考 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
Introduction to the C Programming Language
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
字串 第10章 part I 8/30/2019.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Introduction to the C Programming Language
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

Introduction to the C Programming Language 字串 (String)

字串 (String) 字串是一個結構性的資料型態,它的實施方式有兩種,一種是使用字元陣列結構,另一種是使用指標.[如下頁所示] 字串的結構與一維的字元陣列是一樣的,兩者的差別在於字串是以空字元‘\0’結束. 字串以空字元‘\0’來當作字串的結束值,它是函數處理字串所認定字串結尾的唯一方法. 1. ( C入門及Turbo系統 楊健貴著.9-3) 2. 宣告字元變數, 產生 一個大, 小寫字母,符號或數字等.(C 語言教學手冊 9-39) 若想要 “一連串字元”  就是字串. 可用字元陣列來處理.

字串 (String)-續1 字串的宣告 字元陣列結構 指標 char 字串變數名稱 [字元個數] ; 例: char s2[13]; /* 宣告字串變數 s2 ,最多13個字元(包含空字元)*/ char 字串變數名稱 [字元個數] = “字串常數” ; 例: char s2[ ]=“I like C”; /*宣告字串變數 s2 ,不指定長度 ,初值為字串常數“I like C.” */ char *字串指標變數名稱 ; 例: char *s2; /* 宣告字串指標變數 s2*/ char *字串指標變數名稱 = “字串常數” ; 例: char *s2=“I like C”; /*宣告字串指標變數 s2,初值為字串常數“I like C.” */ s2 字元陣列結構 I l i k e C \0 指標 ( C入門及Turbo系統 楊健貴著.9-3) 一. 以“字元陣列”結構來儲存字串:char s2[13]  宣告陣列有13個空間(bytes,一個字元佔1byte),可存放12個字元, 最後一個空間存放字串結束符號‘\0’. 二. 以陣列結構來儲存字串:char s2[ ]=“I like C.” 不指定長度,但當初值設定時,系統就 會自動將結束符號(‘\0’)傳進陣列的最後一個位址. 三. 以指標方式來實施字串:*char *s2=“I like C.” 它是利用系統的heap空間,將字串存到所配置 的heap空間,再由指標址到所配置的heap的起始位置. 四.字串的最大長度為65535個字元. 五. 無論以陣列結構或指標來宣告字串型態,欲單獨存取字串中的元素( 字元),可用:( C入門及Turbo系統 楊健貴著.9-11) a. s2[ i ] 陣列索引( i ). b. *(s2+ i ) 指標器指到起始位址加上位移( i )之位置. 六. (C 語言教學手冊 9-44) 使用字串陣列時, 由於每個字串的長度不一, 會造成陣列空間的浪費, 若想避免這種情形, (C 語言教學手冊 10-38) 可用指標陣列來解決. 指標陣列: 指標變數 + 陣列的宣告方式. ( 即, 在陣列名稱再加上依址取值運算子 ) I l i k e C \0

字串 (String)-續2 /* 印出字元及字串的長度 */ #include <stdio.h> int main(void) { char a[]="My friend"; char b='c'; char str[]="c"; printf("sizeof(a)=%d\n",sizeof(a)); printf("sizeof(b)=%d\n",sizeof(b)); printf("sizeof(str)=%d\n",sizeof(str)); return 0; } (C 語言教學手冊 9-40) 1.檔名:str-size.c 執行結果: sizeof(a)=10 sizeof(b)=1 sizeof(str)=2 2.sizeof( ) (C 語言教學手冊 3-5) (C語言入門進階 位元編著 松崗出版 的p4-24.) 格式: sizeof( 資料型態名稱 ) or sizeof ( 變數名稱 ) 功能: 計算 資料型態名稱或變數 在記憶體中所佔的位元組大小. 亦即求算 資料型態名稱或變數 長度.

字串 (String)-範例一 範例一: 以字元陣列及字元指標變數表示字串 #include<stdio.h> main( ) { int i; char s1[13]; char s2[13]="I like C."; char *s3; char *s4="Thank you!"; printf("s2=%s\n",s2); printf(“s4=%s\n”,s4); /*印出字串指標變數s4所指的字串*/ for(i=0;i<13;i++) s1[i]=s2[i]; /*將s2 copy至s1*/ printf("s2=s1,then s1=%s\n",s1); s3=s4; printf(“s3=s4,then s3=%s\n”,s3); /*印出印出字串指標變數s3所指的字串*/ s3=s2; printf("s3=s2,then s3=%s\n",s3); printf("The 3nd character of s4 is '%c'. \n ",*(s4+2)); } 檔名 : s1-1.c 一.執行結果: s2=I like C. s4=Thank you! s2=s1,then s1=I like C. s3=s4,then s3=Thank you! s3=s2,then s3=I like C. s4's 3nd character is 'a' 二.參考來源 : C語言入門 (P.9-4)

字串 (String) -範例二 範例二: 示範字串資料的輸入與輸出 #include<stdio.h> main( ) { char *s1="I love C"; char *s2="\0"; char s3[20]; char s4[]="I like C"; printf("The s1 are:%s\n",s1); printf("The s2 are:"); gets(s2); /*get string的意思, 定義在stdio.h*/ puts(s2); /*put string的意思, 定義在stdio.h*/ printf("Enter s3 string: "); scanf("%s",s3); printf("The s3 are:%s\n",s3); printf("The s4 are:%s\n",s4); } 檔名 : S2.c 一.執行結果: The s1 are:I love C The s2 are:I am a boy Enter s3 string:test The s3 are:test The s4 are:I like C 二.字串資料輸入,從鍵盤輸入的方式有兩種, 分別是scanf( )函數與gets( )函數, 三.以scanf( )函數的控制格式%s來輸入字串資料時, 字串中不能有空白字元. 四.若字串含有空白字元,則應以gets( ) 函數. 來做字串資料的輸入. gets( ) 於按下enter 後, 才會接收該字串,並存於指定的位置,並於字串結尾處加上字串結束字元(‘\o’). ( C語言教學手冊. 9-43) 五.puts( ) 會將字串的結束字元(‘\o’)轉換成 換行字元. 所以,在輸出一個字串後,會自動換行. ( C語言教學手冊. 9-43)

字串 (String) -範例三 s a b c d e f g \0 $ + t i j k l m n o p \0 $ + 範例三: 示範字串參數以call by address傳遞 #include<stdio.h> main( ) { void change(char *); char s[ ]="abcdefg"; char *t="ijklmnop"; change(s); change(t); puts(s); puts(t) } void change(char *x) *(x+2)='$'; *(x+5)='+'; s a b c d e f g \0 $ + t i j k l m n o p \0 $ + 檔名 : S3.c 一.執行結果: Ab$de+g Ij$lm+op 二.字串參數的傳遞是以call by address的方式進行 三.在函數中更改某一個字元,回到主程式時,其字串中之字元也被更改了. 四.參考資料:C入門與Turbo系統 P.9-12至P.9-15

字串 (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) strchr( ) strchr(str1,ch) 根據字元的ASCII值,與str1比對,若無相同的ASCII值,則傳回空指標;若比對相同,則將出現的位址傳回 strstr( ) strstr(str1,str2) 從str2開始與str1比對,若無一樣的子字串,則傳回空指標;若一樣,則傳回str1比對一樣的位址 Go Go Go Go 一.字串連結:strcat ; strncat 二.字串複製:strcpy ; strncpy 三.字串比較:strcmp 四.字串長度:strlen 五.字串搜尋:strchr ; strstr Go 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 -範例五 範例五: strncat( ) #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 -範例六 範例六: strcpy( ) #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 -範例七 範例七: strncpy( ) #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 -範例八 範例八: strcmp( ) #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 -範例九 範例九: strlen( ) #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

字串(String)-常用的String Library Function -範例十 範例十: strchr( )及strstr #include<stdio.h> #include<string.h> main( ) { char *p,*q; char ch1='a', *ch2="am"; char *s1="I am OK"; char *s2=" I am OK "; p=strchr(s1,ch1); q=strstr(s2,ch2); printf("s1 serach 'a'=%s ; \n",p); printf("s2 search \"am\"=%s\n",q); } 檔名 : S10.c 執行結果: s1 serach 'a'=am OK ; s2 search 'am'=am OK 二.p=strchr(s1,ch1) ch1的值在s1字串中,從頭找尋並傳回. 三.q=strstr(s2,ch2) ch2字串在s2字串中,從頭尋找並傳回.