Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
电子成绩单项目实现.
Advertisements

第九章 字串 (String).
補充: Input from a text file
第六讲 指针与字符串 —— 为什么指针 —— 持久动态内存分配 —— 字符串(字符数组).
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
複習 struct score_Type{ int chinese,english; }; struct my_Type{
第六章 数 组 主讲教师 贾月乐 联系电话:
函數 授課:ANT 日期:2009/3/24.
Introduction to the C Programming Language
程序设计II 第三讲 字符串处理.
函數 授課:ANT 日期:2011/3/28.
String C語言-字串.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
Introduction to the C Programming Language
Introduction to the C Programming Language
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Introduction to the C Programming Language
Introduction to the C Programming Language
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
Introduction to the C Programming Language
第四章 C 语言中的输入和输出.
Introduction to the C Programming Language
Introduction to the C Programming Language
字符串和字符数组 字符串的输入和输出 字符串的基本操作
第八章 使用指针.
函 数 实验八 第24讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
Introduction to the C Programming Language
第十章 指针.
第三章 顺序结构程序设计 主讲教师 贾月乐 电话:
数组 梁春燕 华电信息管理教研室.
Struct結構 迴圈
C++大学基础教程 第5章 数组 北京科技大学 信息基础科学系.
自我參考結構 (self-reference – 1)
C语言概述 第一章.
深度學習C++ Chapter 7 簡易字串 深度學習 C++ 簡易字串.
C语言复习3----指针.
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
Introduction to the C Programming Language
函式庫補充資料.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
輸出與輸入(I/O).
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C程序设计.
第4章 数 组.
第九章 指针.
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
第二章 类型、对象、运算符和表达式.
第四章 C 语言中的输入和输出.
挑戰C++程式語言 ──第9章 函數.
Introduction to the C Programming Language
1.4WIN32中的宽字符.
本节内容 C语言中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C/C++基礎程式設計班 字元與字串 講師:林業峻 CSIE, NTU 3/14, 2015.
Oop7 字串 String.
Introduction to the C Programming Language
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
字串 第10章 part I 8/30/2019.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
陣列與檔案處理 授課:張朝麟 日期:2009/3/11.
第11章 字符和内存处理 一、字符数组、指针和字符串的初始化作用 二、strlen函数确定字符串有效长度 三、strcpy函数拷贝字符串.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
Introduction to the C Programming Language
隨機函數.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
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) -範例二修正版 #include<stdio.h> main( ) { char *s1="I love C"; char m[10]; char *s2=m; 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); system("pause"); }

字串 (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) -範例三修正版 #include<stdio.h> main( ) { void change(char *); char s[ ]="abcdefg"; char m[]="ijklmnop"; char *t=m; change(s); change(t); puts(s); puts(t); system("pause"); } void change(char *x) *(x+2)='$'; *(x+5)='+';

字串 (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)= -5 二.s1<s2,所以傳回值是負數, s1的‘e’ ASCII碼為65(16進位), s2的‘j’ASCII碼為6A(16進位),6A-65=5 a(97) – f(102) = -5

字串(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,*s3="am"; int ch1='K'; char *s1="I am OK"; char *s2="I am OK"; p=strchr(s1,ch1); q=strstr(s2,s3); printf("s1 search 'a'=%s ; s2 search 'am'=%s\n",p, q); printf("s1 search ‘K‘ index=%d ; s2 search 'am‘ index=%d\n",p-s1,q-s2); system("pause"); } 檔名 : S10.c 執行結果: s1 serach 'a'=am OK ; s2 search 'am'=am OK 二.p=strchr(s1,ch1) ch1的值在s1字串中,從頭找尋並傳回. 三.q=strstr(s2,ch2) ch2字串在s2字串中,從頭尋找並傳回.