C/C++基礎程式設計班

Similar documents
C/C++基礎程式設計班

C 語言—陣列及字串

新・明解C言語入門編『索引』

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

CC213

CC213

untitled

程式基礎之字串函數與處理篇 前言 無論是在現實世界或是網路世界, 文字都是我們溝通的方式之一 在資訊的世界裡面, 怎麼利用程式把文字照自己想要的方式呈現就是個很基本也很重要的技術 但我們可能會發現, 許多文字處理要做的事情都很類似 ( 例如把兩個字串接在一起, 或是照特定格式輸出 ), 因此在 C

Microsoft PowerPoint - 20-string-s.pptx

C/C++程序设计 - 字符串与格式化输入/输出

C 1

C/C++ - 文件IO

Microsoft Word - ACL chapter02-5ed.docx

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Microsoft Word - administrative-law-08.doc

!194 課程 大綱 陣列介紹 [P.195] 陣列的使 用 [1] - 多個同型變數 [P.196] 陣列的初始化 [P.198] 陣列的使 用 [2] - 循序存取 [P.199] 陣列的使 用 [3] - 隨機存取 [P.200] 陣列的複製 [P.203] 在函式間傳送陣列 [P.204]

C/C++ 语言 - 循环

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

CC213

nooog

Strings

C C

Ps22Pdf

C/C++基礎程式設計班

Microsoft Word - AEL 序.doc

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

Microsoft Word - chap13.doc

C/C++语言 - C/C++数据

Microsoft PowerPoint - ch09_AEL0080.ppt

Microsoft Word - CH09

epub 33-8

_汪_文前新ok[3.1].doc

Microsoft PowerPoint - C-Ch10.ppt




Ps22Pdf

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

C/C++语言 - 分支结构

《计算概论》课程 第十九讲 C 程序设计语言应用

C

C

新版 明解C++入門編

Microsoft Word - 24.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Ps22Pdf

Microsoft Word - Chap02.doc

Slide 1

字元意義備註 \n 換行字元 \t Tab \r 迴車鍵 Windows 系統中以 \r\n 代表換行 \ 單引號 \" 雙引號 \0 空字元 用來代表字串的結束 \\ 倒斜線 倒斜線被用做跳脫字元, 因此要用兩個倒斜線表示 表 3.2: 常用特殊字元 ( 二 ) 常用技巧 : 字元判斷在 ASCI

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

Searching and Sorting

Microsoft Word - part doc

Microsoft PowerPoint - chap3

untitled

C/C++基礎程式設計班

《C语言程序设计》教材习题参考答案

(Microsoft Word - 103\300\347\267~\266\265\245\330\245N\275X)

,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : : : /16 : : 96 : : : ISBN 7

2015年计算机二级(C语言)模拟试题及答案(四)

第3章.doc

zw.PDF

E. (A) (B) (C) (D). () () () (A) (B) (C) (D) (E). () () () (A) (B) (C) (D) (E). (A)(B)(C) (D) (E) (A) (B) (C) (D) (E) (A) (B)(C) (D) (E). (A) (B) (C)

保母人員丙級應檢資料第二部份 doc

Microsoft Word - 4.doc


untitled

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

untitled


840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File


Ps22Pdf

. (A) (B) (C) A (D) (E). (A)(B)(C)(D)(E) A

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

[改訂新版]C言語による標準アルゴリズム事典

第一类

untitled

untitled

中華民國 第51屆中小學科學展覽會


Microsoft Word - ACG chapter00c-3ed.docx

Microsoft Word _1-2.doc

untitled

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]


(Microsoft Word - \244H\305\351\273P\244\273\244j\300\347\276i\257\300.doc)

Microsoft Word - C-pgm-ws2010.doc


C/C++基礎程式設計班

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

恩 典 课 堂 教 学 概 览 课 堂 环 节 持 续 时 间 活 动 所 需 材 料 1 欢 迎 持 续 在 门 口 欢 迎 学 生, 聆 听 他 们 分 享 本 周 开 心 或 烦 恼 的 事 预 备 活 动 <10 分 钟 A 猜 猜 是 谁 B 上 帝 的 礼 物 无 孩 子 们 的 儿 时

团 契 就 体 力 来 说, 参 孙 乃 是 地 上 极 强 壮 的 人 ; 但 在 自 制 忠 贞 和 坚 稳 上, 他 却 是 人 间 最 软 弱 的 了 先 祖 与 先 知 第 页 教 室 布 置 见 第 一 课 课 堂 教 学 概 览 课 堂 环 节 持 续 时 间 活 动

Microsoft Word - 095_ 什麼最快樂 (白話與經文加註)-ok .doc

《红烛》

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

, 即 使 是 在 昏 暗 的 灯 光 下, 她 仍 然 可 以 那 么 耀 眼 我 没 有 地 方 去, 你 会 带 着 我 么 杜 晗 像 是 在 嘲 笑 一 般, 嘴 角 的 一 抹 冷 笑 有 着 不 适 合 这 个 年 龄 的 冷 酷 和 无 情, 看 着 江 华 的 眼 神 毫 无 温

投影片 1

* ) )4566 -!"#$$%"# * : ;* < => => 27;* ;* ;* )7:5)(54? *4566 7**4

Transcription:

C/C++ 基礎程式設計 字元與字串 講師 : 張傑帆 CSIE, NTU 人的出身並不重要, 你拿時間來做什麼才重要 It s not who you were at birth that matters, but what you do with the time you are given.-steve Jobs

課程大綱 字元 字串 作業

字元 在電腦的世界裡, 所有的一切都是以 0 與 1 之數位訊號來表示 一個字元 (char) 可存 0~255 (1Byte) 如何表示一個符號 數字或英文字母? 給一個符號 數字或英文字母一個編號 (ASCII 字碼 ) EX: A 65, B 66,, Z 90 a 97, b 98,, z 122 0 48, 1 49,, 9 57 + 43, - 45

字元表

字元 getchar() 輸入字元 putchar() 輸出字元 #include <stdio.h> int main() char ch; ch = getchar(); putchar(ch); putchar('\n'); return 0;

字元 getch() 輸入字元, 不需按 enter, 輸入內容不顯示於螢幕 getche() 輸入字元, 不需按 enter, 輸入內容顯示於螢幕 #include <conio.h> int main() char ch; //ch = getche(); ch = getch(); // 比較使用 getche() 的差異 return 0;

其中 ch 為字元變數 下表為此三種輸入函式的比較表 :

Visual C++ 的問題 在 ProjectProperties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions 加入這兩行 _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE

字元應用 判斷輸入字元是大寫英文, 小寫英文, 數字, 或其他 #include <stdio.h> int main() char ch; ch = getchar(); if(ch>='0' && ch<='9') printf(" 你輸入了數字 \n"); else if(ch>='a' && ch<='z') printf(" 你輸入了大寫英文 \n"); else if(ch>='a' && ch<='z') printf(" 你輸入了小寫英文 \n"); else printf(" 你輸入了其他字元 \n"); return 0;

字元應用 將輸入的小寫英文轉成大寫英文 #include <stdio.h> int main() char ch; ch = getchar(); if(ch>='a' && ch<='z') ch-=32; // 或 ch-=('a'-'a'); printf("%c\n", ch); else if(ch>='a' && ch<='z') printf("%c\n", ch); else printf(" 你輸入的不是英文字母 \n"); return 0;

字元函式 <cctype> (ctype.h)

課程大綱 字元 字串 作業

字串 在程式語言中, 一個英文單字, 一個句子, 都可以當成一個字串 在 C 語言中, 一個一維的的字元陣列可以當成一個字串 在 C 語言中, 可用雙引號 " 文字 " 表示一個字串 字串 = 一堆字元 + 字串結束字元 '\0 char a[]='h', 'e', 'l', 'l', 'o', '\0'; char a[]="hello"; 位置 : a 'H' 'e' 'l' 'l' 'o' '\0'

字串 以下 a,b,c 皆可表示 Hello 字串 #include <stdio.h> int main() char a[]="hello"; // 字串初始化 char b[]='h','e','l','l','o','\0'; // 字元陣列初始化 char c[6]; // 字元陣列宣告 c[0]='h'; c[1]='e'; c[2]='l'; c[3]='l'; c[4]='o'; c[5]='\0'; // '\0' 是字串的結束符號 printf("%s \n",a); // 字串 a 輸出 printf("%s \n",b); // 字串 b 輸出 printf("%s \n",c); // 字串 c 輸出 return 0;

字串輸入輸出 利用 scanf 來讀取一個字串在用 printf 印出 比較 : 陣列長度 vs. 字串長度 陣列長度 : 陣列中可儲存幾個資料 字串長度 : 字串結束字元前有多少個字元 #include <stdio.h> int main() char a[80]; scanf("%s", &a); printf("%s \n",a); return 0; // 或用 a

字串輸入輸出 用 scanf 來讀字串, 字串中不能有空白若有空白會被當成兩個不同的字串 gets(a) 輸入字串 a, 以 enter 鍵做為字串結束 puts(a) 輸出字串 a #include <stdio.h> int main() char a[80]; gets(a); puts(a); return 0;

字串輸入輸出 當 scanf 遇上 gets scanf 輸入完後所按下之 enter 鍵會殘留在輸入緩衝區 stdin( 或稱標準輸入檔 ) 將影響到下一次的 gets 輸入 解法 : 使用 fflush(stdin); 或加空白 #include <stdio.h> int main() char a[80]; char b[80]; scanf("%s/* */", a); gets(b); // 此 gets 無法正常輸入 printf("%s\n", a); printf("%s\n", b); return 0;

字元輸入輸出 當 scanf( %c ) 遇上其它 scanf() scanf 輸入完後所按下之 enter 鍵會殘留在輸入緩衝區 stdin( 或稱標準輸入檔 ) 將影響到下一次的 scanf( %c ) 輸入 解法 : 使用 fflush(stdin); 或加空白 #include <stdio.h> int main() int n1; char c1; scanf("%d", &n1); //fflush(stdin); scanf(" %c", &c1); printf("n1 = %d, c1 = %c\n", n1, c1); return 0;

練習 輸入一字串將其中小寫字元轉成大寫字元 例如 : 輸入 abcde123 輸出 ABCDE123 字元陣列可使用 strlen() 來取得字元的個數其函式定義於 string.h 函式內

使用二維陣列存放字串 當有多個字串要儲存可以使用字元二維陣列 #include <stdio.h> int main() int i; char name[3][80]; for(i=0; i<3; i++) // 輸入三個人姓名 printf(" 姓名 %d: ", i+1); gets(name[i]); for(i=0; i<3; i++) // 輸出三個人姓名 printf(" 姓名 %d: %s\n", i+1, name[i]); return 0;

字串應用 C 語言中提供許多字串相關函式可以使用, 以下介紹常用的幾個函式 : 字串比對 : strcmp 字串複製 : strcpy 字串連接 : strcat 計算字串長度 : strlen C 語言字元字串函式參考網站 http://www.cppreference.com/wiki/c/string/start http://www.cplusplus.com/reference/clibrary/cstring/

字串應用 字串原理 : 字串用字元陣列儲存 陣列名稱 : 陣列開頭之記憶體位置 因此, 字串處理 = 陣列處理 字串處理相當複雜, 但又太常用了, 因此 C 語言提供了一些函式讓我們可以方便使用

字串比對錯誤用法! 下列程式可以執行, 但沒有意義 #include <stdio.h> int main() char a[]="hello"; char b[80]; scanf("%s", &b); if ( a==b ) printf(" 輸入字串正確 \n"); else printf(" 輸入字串錯誤 \n"); return 0;

字串比對 : strcmp strcmp(a, b): 比對 a,b 字串之內容 strcmp(a,b) > 0 : a 字串字母順序較大 strcmp(a,b) < 0 : b 字串字母順序較大 strcmp(a,b) == 0 : a,b 兩字串內容一樣 #include <stdio.h> #include <string.h> int main() char a[80]="hello"; char b[80]; scanf("%s", &b); if ( strcmp(a,b)==0 ) printf(" 輸入字串正確 \n"); else printf(" 輸入字串錯誤 \n"); return 0;

字串比對 : strcmp 範例 : 比較兩個字串內容 #include <stdio.h> #include <string.h> int main() char a[80]; char b[80]; printf(" 輸入第一個字串 : "); scanf("%s", &a); printf(" 輸入第二個字串 : "); scanf("%s", &b); if ( strcmp(a,b) > 0 ) printf(" 輸入第一個字串字母順序較大 \n"); else if ( strcmp(a,b) < 0 ) printf(" 輸入第二個字串字母順序較大 \n"); else printf(" 二個字串內容相同 \n"); return 0;

字串複製錯誤用法! 下列程式不可執行 #include <stdio.h> int main() char a[80]; char b[80]="how are you"; a = b; // 錯誤! a 為記憶體位置, 為一個常數, 不可存放資料 printf("%s\n", a); return 0;

字串複製 : strcpy strcpy(a, b): 將 b 字串內容複製到 a 字串 #include <stdio.h> #include <string.h> int main() char a[80]; char b[80]="how are you"; strcpy(a, b); printf("%s\n", a); return 0;

字串連接錯誤用法! 下列程式不可執行 #include <stdio.h> int main() char a[80]="hi, "; char b[80]="how are you"; a+=b; // 錯誤! a 為記憶體位置, 為一個常數, 不可存放資料 printf("%s\n", a); return 0;

字串連接 : strcat strcat(a, b): 將 b 字串內容加到 a 字串後面 #include <stdio.h> #include <string.h> int main() char a[80]="hi, "; char b[80]="how are you"; strcat(a, b); printf("%s\n", a); return 0;

注意陣列的大小 在把字串複製到陣列的情況下, 要注意不可以超出陣列的大小 範例 : int main(void) char str0[10]; char str1[10]; char str2[10]; 不可以使用大小不足的陣列

計算字串長度 : strlen strlen(a): 計算 a 字串長度 #include <stdio.h> #include <string.h> int main() char a[80]; int n; gets(a); n = strlen(a); printf(" 字串長度 = %d\n", n); return 0;

課程大綱 字元 字串 作業

猜數字遊戲 輸入四位不重覆數字 (0~9), 做為電腦的題目 輸入四位不重覆數字 (0~9), 做為您猜的答案 不需檢查使用者輸入之格式 當輸入之答案與題目相同, 程式結束 遊戲規則 電腦的題目 : 1234 您猜的數字 : 5283 結果為 1A1B 表示您共猜對了兩位數, 其中有一個字位置對, 另一個字位置不對 其中,A 表示猜對一個字且位置也對,B 表示猜對一個字但是位置不對

範例 Enter the question: 1234 guess: 5283 1A1B guess: 5290 1A0B guess: 7890 0A0B guess: 1256 2A0B guess: 5634 2A0B guess: 1234 4A0B you win! bye! Press any key to continue

附錄 : 輸出入函式參考表 ANSI C 所提供的標準輸出入函式如下表所示 :

延申閱讀 字串函式庫 <cstring> (string.h) http://www.cplusplus.com/reference/cstring/ 字串與數字間轉換 atof() atoi() atol() strtod() strtol() strtoul itoa ltoa strtod, strtol, strtoul sprintf 與 sscanf 讀取中文字元 一個中文字佔 2byte 異常中文字元 許 功 蓋 處理 因為第二個 byte 中包含 \ 在其後多加一個 \ 即可解決