12.07.2015 Views

char str[]

char str[]

char str[]

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

11-1 字 串 的 基 本 概 念 語 宣 告 在 宣 告 字 串 變 數 之 後 該 如 何 使 用 呢 ?Ĉ 如 果 以 字 元 陣 列 的 觀 點 來 看 字 串 則 初 始 值靹的 給 定 方 式 就 是 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[]={'H','e','l','l','o'}; //--- 字 元 必 須 使 用 單 引號 或 是 <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]={'H','e','l','l','o'};可 以 指 定 陣 列 大 小 ,ā 但 是 所 給 定 的 字 元 不 能 超 過 該 值靹 減 一 ,ā否 則 編 譯 時頗 會 發 生 超 出 陣 列 界 線 的 錯 誤


11-1 字 串 的 基 本 概 念 語 宣 告 但 是 使 用 這 樣 的 方 式 來 設 定 字 串 實 在 很 麻煩 ,ā 因 此 在 C 中 也 提 供 另 外 一 種 特顠 殊頻 方 式 來設 定 字 串 的 初 始 值靹 ,ā 也 就 是 一 般 直 覺 使 用字 串 常 數 的 方 式 ,ā 例 如 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[]="Hello"; //-- 字 串 必 須 使 用 雙 引 號 ,ā 但不 必 給 \0 或 是 <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]="Hello"; //-- 字 串 必 須 使 用 雙 引 號


11-1 字 串 的 基 本 概 念 語 宣 告 使 用 <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]=“Hello” 的 程 式 碼 時頗 ,ā 編 譯器 會 為 它 留 下 10 個鞄 位 元 組 的 空 間 ;Ć 如 果 使 用 <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[]="Hello" 的 程 式 碼 ,ā 則 編譯 器 只 會 為 它 留 下 6 個鞄 位 元 組 的 空 間 ( 雖 然Hello 只 有 5 字 元 ,ā 但 是 別 忘 了 還 有 \0 的 結 束符 號 喔 )ă


11-1 字 串 的 基 本 概 念 語 宣 告 宣 告 字 串 變 數 之 後 如 何 設 定 它 的 值靹 呢 ?Ĉ 這 就 不 是 使 用 簡 單 的 指 派 運 算 子 就 可 以 解決 ,ā 因 為 它 的 本 質 是 陣 列 ,ā 例 如 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]; <strong>str</strong>="Hello"; //--- 這 是 一 個鞄 錯 誤 的 寫 法


11-1 字 串 的 基 本 概 念 語 宣 告以 直 覺 的 字 串 指 派 方 式 是 錯 誤 的 寫 法 ă回 歸 陣 列 的 角 度 來 思 考 ,ā 則 指 派 的 寫 法 就 必 須 成為 :ć<strong>str</strong>[0]='H';<strong>str</strong>[1]='e';<strong>str</strong>[2]='l';<strong>str</strong>[3]='l';<strong>str</strong>[4]='o';<strong>str</strong>[5]='\0';


字 串 資 料頔 指 派 示 範[ 程 式 範 例 Proj11-1] 字 串 指 派執 行 畫 面 :ć


字 串 資 料頔 指 派 示 範 #include "stdafx.h " #include " stdio.h " #include "stdlib.h" #include "<strong>str</strong>ing.h" //--- 字 串 指 派 示 範int main() { <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10],<strong>str</strong>1[10],<strong>str</strong>2[20]; //--- 宣 告 字 串 <strong>str</strong>[0]='H'; //--- 以 陣 列 觀 點 來 指 派 字 串 的 值靹 <strong>str</strong>[1]='e'; <strong>str</strong>[2]='l'; <strong>str</strong>[3]='l'; <strong>str</strong>[4]='o'; <strong>str</strong>[5]='\0'; printf("<strong>str</strong>=%s \n",<strong>str</strong>); //--- 將 <strong>str</strong> 字 串 資 料頔 輸 出 <strong>str</strong>cpy(<strong>str</strong>1,"Hello"); //--- 指 定 <strong>str</strong> 字 串 為 "Hello" printf("<strong>str</strong>1=%s \n",<strong>str</strong>1); //--- 將 <strong>str</strong> 字 串 資 料頔 輸 出 <strong>str</strong>cpy(<strong>str</strong>2,<strong>str</strong>1); //--- 指 定 <strong>str</strong>2 字 串 為 <strong>str</strong>1 字 串 printf("<strong>str</strong>2=%s \n",<strong>str</strong>2); //--- 將 <strong>str</strong> 字 串 資 料頔 輸 出 system("pause"); }


11-2 字 串 的 讀 取 與 輸 出 在 第 4 章 介 紹 資 料頔 基 本 的 輸 出 輸 入 時頗 就 曾 提到 過 ,ā 使 用 scanf() 與 printf() 就 可 以 對 字 串資 料頔 做 輸 入 與 輸 出 ,ā 而 且 是 搭 配 “Ņ%s” 格頴 式特顠 定 字 元 ă 只 因 當 時頗 還 未 介 紹 字 串 ,ā 所 以 並 沒 有 交 代清 楚 ă 在 學 過 字 串 的 宣 告 之 後 ,ā 再 回 頭 使用 scanf() 與 printf() 就 可 說 是 易 如 反 掌 了 ă


字 串 的 讀 取 與 輸 出 - 範 例[ 程 式 範 例 Proj11-2] 使 用 scanf() 與 printf() 做 資 料頔 的 輸 入 與輸 出執 行 畫 面 :ć


字 串 的 讀 取 與 輸 出 - 範 例 {#include "stdafx.h“#include "stdio.h“#include "stdlib.h"#include "<strong>str</strong>ing.h"int main() <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]; //--- 宣 告 一 字 串 printf(" 請 輸 入 大 名 :ć"); scanf("%s", <strong>str</strong>); //--- 將 資 料頔 讀 取 至 <strong>str</strong> 中 printf("%s 您 好 \n", <strong>str</strong>);//--- 將 <strong>str</strong> 字 串 資 料頔 輸 出 system("pause"); }


字 串 的 讀 取 與 輸 出程 式 中 會 讓 人 覺 得 困 惑 的 是 讀 取 資 料頔 時頗 只 有 使 用 scanf("%s",<strong>str</strong>);為 何 不 是 scanf(“%s”,&<strong>str</strong>); // 錯 誤原鞝 因 是 因 為 <strong>str</strong> 陣 列 在 傳 送 時頗 就 已 經 是 位 址 了 ,ā所 以 不 再 需 要 使 用 位 址 運 算 子 & 了 ă


字 串 的 -gets() 與 puts()字 串 專 用 函 式 :gets() 與 puts() ă使 用 gets()/puts() 與 上 一 小 節 所 介 紹 scanf()/printf()最 大 的 差韤 別 就 在 於 單 一 與 多 元 ă這 也 就 是 說 ,āgets()/puts() 只 專 注 於 一 個鞄 字 串 的 輸入 / 輸 出 ,ā 如 果 想 要 一 次 取 得 兩 個鞄 字 串 的 資 料頔 則 需要 使 用 兩 次 gets() 函 式 ,ā 並 無 法 像 scanf() 可 以 透 過使 用 scanf("%s %s") 來 一 次 取 得 兩 個鞄 字 串 ă


字 串 的 -gets() 與 puts()- 範 例問 題 描 述 :ć 使 用 新 介 紹 的 函 式 重 做 程 式 範 例 Proj11-2執 行 畫 面 :ć


字 串 的 -gets() 與 puts()- 範 例 { }#include "stdafx.h“#include "stdio.h“#include "stdlib.h"#include "<strong>str</strong>ing.h"int main()<<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]; //--- 宣 告 一 字 串printf(" 請 輸 入 大 名 :ć");gets(<strong>str</strong>);//--- 將 資 料頔 讀 取 至 <strong>str</strong> 中puts(<strong>str</strong>);//--- 將 <strong>str</strong> 字 串 資 料頔 輸 出puts(" 您 好 !ĉ"); //--- 也 可 以 輸 出 字 串 常 數system("pause");


字 串 的 讀 取 與 輸 出 - 結 合為 了 做 字 串 的 結 合 ,āC 提 供 了 一 個鞄 <strong>str</strong>cat() 函 式 ( 定義 於 <strong>str</strong>ing.h 檔 案頥 中 ) 來 完 成 這 項 任 務 ,ā 例 如 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[20]= "Peter,"; <strong>str</strong>cat(<strong>str</strong>, "Hello!ĉ");將 "Helloo" 字 串 常 數 加到 <strong>str</strong> 字 串 變 數 後 面


字 串 的 讀 取 與 輸 出 - 結 合 - 範 例[ 程 式 範 例 Proj11-4] 字 串 結 合 示 範問 題 描 述 :ć 修鞈 改 程 式 範 例 Proj11-3,ā 使 得 ĵ 您 好 Ķ 與 名 字可 以 在 同 一 行 ă執 行 畫 面 :ć


字 串 的 讀 取 與 輸 出 - 結 合 - 範 例 #include "stdafx.h“ #include "stdio.h“ #include "stdlib.h" #include "<strong>str</strong>ing.h" //--- 字 串 結 合 示 範 int main() { <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[20]; //--- 宣 告 一 字 串 printf(" 請 輸 入 大 名 :ć"); gets(<strong>str</strong>); //--- 將 資 料頔 讀 取 至 <strong>str</strong> 中 <strong>str</strong>cat(<strong>str</strong>,", 您 好 !ĉ"); //-- 做 字 串 結 合 puts(<strong>str</strong>); //--- 將 <strong>str</strong> 字 串 資 料頔 輸 出 system("pause"); }


11-3 字 串 的 位 址 探 討由 於 字 串 在 此 是 被 視 為 字 元 陣 列 ,ā 因 此 就 像 圖11-1 所 示 ,ā 每 個鞄 字 元 就 佔 據 一 個鞄 位 元 組 的 記 憶體 空 間 ă所 以 ,ā 想 要 輸 出 該 字 串 也 就 可 以 使 用 一 個鞄 for、while 等 迴 圈 來 對 陣 列 內 容韕 一 一 輸 出 ă


字 串 的 位 址 探 討 - 範 例 1[ 程 式 範 例 Proj11-5] 使 用 字 元 方 式 輸 出 字 串 內 容韕問 題 描 述 :ć 修鞈 改 程 式 範 例 Proj11-4,ā 使 用 字 元 方 式 輸 出 並標 明 其 位 址 ă執 行 畫 面一 個鞄 中 文 字 佔用 兩 個鞄 bytes字 串 結 束 後 空間 內 所 儲 存 的資 料頔 ,ā 但 是 無法 預 知 其 內 容韕這 裡 已 是 字 串的 結 尾 '\0'


字 串 的 位 址 探 討 - 範 例 1 #include "stdafx.h“ #include "stdio.h“ #include "stdlib.h" #include "<strong>str</strong>ing.h" int main() { <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[20]; //--- 宣 告 一 字 串printf(" 請 輸 入 大 名 :ć"); gets(<strong>str</strong>); //--- 將 資 料頔 讀 取 至 <strong>str</strong> 中 <strong>str</strong>cat(<strong>str</strong>,", 您 好 !ĉ"); //-- 做 字 串 結 合 int indx=0; while(<strong>str</strong>[indx]!='\0') //--- 一 直 執 行 到 字 串 結 束 為 止printf("%c",<strong>str</strong>[indx++]); printf("\n--- 以 下 顯 示 字 元 陣 列 內 容韕 與 位 址 ---\n"); for(indx=0;indx


字 串 的 位 址 探 討 - 範 例 2問 題 描 述 :ć 使 用 兩 個鞄 字 串 ,ā 先 將 這 些 字 串 輸 出 並 標 明 其 位 元 的 位址 ,ā 接 著 指 定 過 長 的 資 料頔 給 字 串 讓 溢 位 發 生 後 在 觀 察 兩 個鞄 字 串 的內 容韕 與 位 址 ă執 行 畫 面 :ć<strong>str</strong> 字 變 成 12 個鞄bytes 位 址 已 超 出原鞝 先 的 邊 界一 開 始 <strong>str</strong>[5] 為 空 字 串 ,ā 位址 在 1241352 結 束一 開 始 <strong>str</strong>1[8] 為 "Hello!"1241356這 4 個鞄 bytes 的位 址 是 <strong>str</strong>1 的做 <strong>str</strong> 字 串 的 輸 入 與 結 合 ,ā雖 然 超 出 指 定 大 小 ,ā 但 是結 果 是 正 確 的<strong>str</strong>1 的 位 址 已 被 <strong>str</strong>


字 串 的 位 址 探 討 - 範 例 2 #include "stdafx.h“ #include "stdio.h“ #include "stdlib.h" #include "<strong>str</strong>ing.h" //--- 字 串 結 合 示 範 int main() { <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[5]={""},<strong>str</strong>1[8]={"Hello!"}; //--- 宣 告 兩 個鞄 字 串int indx; printf("---<strong>str</strong> 的 字 串 內 容韕 與 位 址 ---%s\n",<strong>str</strong>); for(indx=0;indx


字 串 的 位 址 探 討 - 範 例 2//--- 將 資 料頔 讀 取 至 <strong>str</strong> 中<strong>str</strong>cat(<strong>str</strong>,", 您 好 !ĉ"); //-- 做 字 串 結 合 ,ā 此 時頗 發 生 的 <strong>str</strong> 字 串 的 溢 位indx=0;printf("---<strong>str</strong> 的 字 串 內 容韕 與 位 址 ---%s\n",<strong>str</strong>);while(<strong>str</strong>[indx]!='\0') //--- 依 字 串 的 實 際 長 度 輸 出printf("index=%d 內 容韕 =%c 位 址=%d\n",indx,<strong>str</strong>[indx],&<strong>str</strong>[indx++]);printf("---<strong>str</strong>1 的 字 串 內 容韕 與 位 址 ---%s\n",<strong>str</strong>1);for(indx=0;indx


11-4 字 串 陣 列在 本 章 中 ,ā 子 串 是 視 為 字 元 的 陣 列 ,ā 所 以 一 維 的字 串 陣 列 就 是 字 元 的 二 維 陣 列 ,ā 因 此 宣 告 的 方 式與 示 意 圖 如 下 :ć<<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>_arr[rows][length];字 串 陣 列 名 稱字 串 的 列 數每 個鞄 字 串 的 長 度


11-4 字 串 陣 列一 維 字 串 陣 列 示 意 圖 :ćlength…… … …...<strong>str</strong>_arr[0]…<strong>str</strong>_arr[rows-1]想 要 印 出 陣 列 中 的 第 一 個鞄 字 串 ,ā 則 只 要 使 用puts(<strong>str</strong>_arr[0]) 就 可 以 了 ă


字 串 陣 列 - 範 例問 題 描 述 :ć 讓 使 用 者 可 以 輸 入 5 行 字 ,ā 然 後 將 這 些 字 串 依順 序 排 列 ă執 行 畫 面 :ć


字 串 陣 列 - 範 例 #include "stdafx.h“ #include "stdio.h“ #include "stdlib.h" #include "<strong>str</strong>ing.h" #define ROWS 5 #define LENGTH 20void printSarray(<<strong>str</strong>ong>char</<strong>str</strong>ong> a[][LENGTH]);//--- 列 印 字 串 陣 列 的 函 式 int main() //--- 字 串 陣 列 的 輸 入 與 排 序 示 範 { }<<strong>str</strong>ong>char</<strong>str</strong>ong> name[ROWS][LENGTH]; //-- 宣 告 一 名 稱 字 串<<strong>str</strong>ong>char</<strong>str</strong>ong> temp[LENGTH]; //-- 排 序 時頗 作 暫 存 資 料頔 區for(int i=0;i


字 串 陣 列 - 範 例//---- 開 始 排 序 ,ā 使 用 上 一 章 所 介 紹 的 Bubble Sort 即 可for(int i=0;i


字 串 陣 列 - 範 例 }void printSarray(<<strong>str</strong>ong>char</<strong>str</strong>ong> a[][LENGTH]){//--- 字 串 輸 出for(int i=0;i


字 串 陣 列 - 範 例上 例 中 出 現 的 新 函 式 為 <strong>str</strong>cmp(),ā 該 函 式 主 要 就 是 比 較 兩個鞄 字 串 ,ā 例 如 :ć <strong>str</strong>cmp(<strong>str</strong>ing1,<strong>str</strong>ing2);該 函 式 執 行 比 較 之 後 會 傳 回 一 整 數 ,ā 其 意 義 說 明 如 下 ,ā而 字 串 比 較 大 小 的 規 則 請 參 考 5-2-5:ć傳 回 值靹意 義 說 明0 <strong>str</strong>ing1 大 於 <strong>str</strong>ing2


11-5 處 理 字 串 的 相 關 函 式 與 應 用處 理 字 串 的 函 式 除 了 之 前 所 介 紹 過 的 gets()、puts()、<strong>str</strong>cpy()、<strong>str</strong>cmp() 以 及 <strong>str</strong>cat() 之 外 ,ā還 有 一 些 經 常 使 用 的 函 式 都 將 整 合 在 本 節 中 介紹 ă


求 字 串 長 度 <strong>str</strong>len()<strong>str</strong>len() 函 式 取 得 目 前 字 串 的 長 度 ă 而 所 謂 字 串 的 長 度指 的 並 非 是 原鞝 來 宣 告 時頗 候鞅 的 大 小 ,ā 而 是 它 實 際 使 用 的長 度 ă 例 如 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[30]= "Ladies and gentlemen";那 麼 使 用 <strong>str</strong>len(<strong>str</strong>) 時頗 就 會 傳 回 20 而 非 30,ā 也 不 是21( 不 會 將 結 束 字 元 \0 計 算 在 內 )ă 事 實 上 ,ā 當 實 際 的字 串 長 度 超 出 所 宣 告 的 大 小 時頗 也 可 以 正 確 計 算 出 其 長度 ă 例 如 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[10]; <strong>str</strong>cpy(<strong>str</strong>,"Ladies and gentlemen");此 時頗 使 用 <strong>str</strong>len(<strong>str</strong>) 也 是 會 傳 回 20,ā 但 是 卻 已 經 發 生了 字 串 的 溢 位 現 象 ă


求 字 串 長 度 <strong>str</strong>len()- 範 例問 題 描 述 :ć 讓 使 用 者 輸 入 一 字 串 與 加 密 金 匙 之 後 ,ā 然 後對 該 字 串 做 一 簡 單 的 加 密 動 作 ,ā 最 後 再 透 過 解 密 將 字 串還 原鞝 ă執 行 畫 面 :ć


求 字 串 長 度 <strong>str</strong>len()- 範 例 {#include "stdafx.h“#include "stdio.h“#include "stdlib.h"#include "<strong>str</strong>ing.h"void coding(<<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[],<<strong>str</strong>ong>char</<strong>str</strong>ong> key);//--- 加 解 密 都 用 同 一 個鞄 函 式int main()<<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[100];<<strong>str</strong>ong>char</<strong>str</strong>ong> key;printf(" 請 輸 入 一 行 文 字 :");gets(<strong>str</strong>);printf(" 請 輸 入 一 字 元 當 加 解 密 的 字 元 :ć");scanf("%c", &key);printf(" 加 密 後 文 字 :ć");coding(<strong>str</strong>,key); //--- 加 密


求 字 串 長 度 <strong>str</strong>len()- 範 例 } { } }puts(<strong>str</strong>);printf(" 解 密 後 文 字 :ć");coding(<strong>str</strong>,key); //--- 解 密puts(<strong>str</strong>);system("pause");void coding(<<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[],<<strong>str</strong>ong>char</<strong>str</strong>ong> key)//--- 加 解 密 用 同 一 函 式for(int i=0;i


求 字 串 長 度 <strong>str</strong>len()- 範 例在 此 加 解 密 所 使 用 的 方 法 就 是 字 串 內 的 每 個鞄 字 元 與 所 輸入 的 鑰 匙 做 xor,ā 例 如 :ć 畫 面 中 的 ‘Ńo’ 與 ‘Ń5’ 做 xor 其 實就 是 數 字 的 111(o 的 ASCII 碼 ) 與 53(5 的 ASCII 碼 ) 做 XOR,ā根頨 據 第 5 章 的 介 紹 ,ā 其 運 算 的 示 意 圖 如 下 :ć 01101111 ^00110101 01011010=90( 為 Z 的 ASCII 碼 )同 理 ,ā 加 密 後 的 結 果 再 透 過 一 次 同 一 鑰 匙 的 加 密 就 是 解密 ,ā 因 為 90 xor 53=111,ā 也 就 是 'o' 的 ASCIIă 而 如 果 解密 的 鑰 匙 不 是 53 時頗 ,ā 那 麼 所 解 出 來 的 字 元 就 不 會 是 原鞝 來的 111ă


字 串 轉 成 數 值靹 atoi() 與 atof()在 使 用 者 輸 入 方 面 ,ā 如 果 使 用 scanf() 函 式 則 容韕 易 因 為 上一 個鞄 字 元 所 留 下 的 ĵGarbageĶ 而 影 響 下 一 個鞄 輸 入 ( 請 參考 4-3),ā 雖 然 可 以 使 用 fflush() 函 式 來 清 除 在 暫 存 區 的 資料頔 ,ā 但 是 只 要 一 不 小 心 就 可 能 發 生 錯 誤 ă 在 這 種 情 況 下 ,ā我 們靽 可 以 使 用 gets() 函 式 來 代 替 scanf(),ā 由 於 gets() 函 式只 能 接 收 字 串 ,ā 因 此 對 於 數 值靹 的 資 料頔 就 勢 必 會 遇 到 轉 換的 問 題 ă在 C 當 中 ,ā 我 們靽 可 以 透 過 atoi() 與 atof() 函 式 ( 定 義 於stdlib.h 檔 案頥 中 ) 將 字 串 轉 換 成 整 數 與 雙 精 準 度 浮顏 點 數 ă


字 串 轉 成 數 值靹 atoi() 與 atof()- 範 例[ 程 式 範 例 Proj11-9] 將 字 串 轉 換 成 數 值靹 的 示 範執 行 畫 面 :ć


字 串 轉 成 數 值靹 atoi() 與 atof()- 範 例 }#include "stdafx.h“#include "stdio.h“#include "stdlib.h"#include "<strong>str</strong>ing.h"int main(){ int i; double f; <<strong>str</strong>ong>char</<strong>str</strong>ong> intemp[20];printf(" 請 輸 入 一 整 數 :");gets(intemp);I = atoi(intemp);//--- 將 取 得 的 字 串 轉 成 整 數printf(" 請 輸 入 一 浮顏 點 數 :");gets(intemp);f = atof(intemp);//--- 將 取 得 的 字 串 轉 成 浮顏 點 數printf(" 所 輸 入 的 整 數 為 :%d, 浮顏 點 數 為 :%lf\n", i, f);system("pause");


將 數 值靹 轉 換 成 字 串 itoa() 與 gcvt()除 了 有 上 一 小 節 數 值靹 轉 成 字 串 的 需 求 之 外 ,ā 也會 有 將 數 值靹 轉 成 字 串 的 需 求 ,ā 例 如 想 將 數 值靹 結合 到 字 串 當 中 ă如 果 想 要 將 整 數 數 值靹 轉 換 成 字 串 則 可 以 使 用itoa() 函 數 ( 定 義 在 stdlib.h 中 );Ć 而 如 果 想 要 將 浮顏點 數 轉 換 成 字 串 則 可 以 使 用 gcvt() 函 數 ( 定 義 在stdlib.h 中 )ă


將 數 值靹 轉 換 成 字 串 itoa() 與 gcvt() 在 使 用 itoa() 函 式 時頗 ,ā 需 要 使 用 轉 換 的 基數 ,ā 其 格頴 式 如 下 :ć itoa( 整 數 數 值靹 , 字 串 暫 存 區 , 基 數 ) 其 中 基 數 的 意 思 就 是 想 要 將 數 值靹 以 何 種 基底 做 轉 換 的 意 思 ,ā 例 如 想 要 將 100 轉 成 二進 位 的 方 式 ,ā 則 為 :ćitoa(100,temp,2)ă 轉換 之 後 temp 就 為 1100100ă


將 數 值靹 轉 換 成 字 串 itoa() 與 gcvt() 同 樣 的 狀 況 也 發 生 在 gcvt() 函 式 當 中 ,ā但 使 用 的 格頴 式 卻 不 相 同 ,ā 如 下 :ć gcvt ( 浮顏 點 數 值靹 , 數 字 長 度 , 字 串 暫 存 區 )


將 數 值靹 轉 換 成 字 串 itoa() 與 gcvt()使 用 gcvt() 與 itoa() 函 式 具 有 相 同 的 含 意 ,ā 主 要就 是 要 將 數 值靹 轉 換 成 字 串 ,ā 但 是 引 數 的 意 義 與順 序 卻 不 相 同 ă 其 中 ĵ 數 字 長 度 Ķ 的 意 思 就 是說 要 將 浮顏 點 數 轉 成 多 少 長 度 的 字 串 ( 不 含 小 數 點 )ă例 如 :ćgcvt (100.55,5,temp),ā 則 轉 換 之 後 temp 為 100.55;Ć如 果 使 用gcvt (100.55,4,temp),ā 則 轉 換 之 後 temp 為100.6( 會 自 動 4 捨 5 入 );Ć 如 果 使 用 gcvt(100.55,3,temp) 呢 ?Ĉ 答 案頥 當 然 就 是 101 囉 !ĉ


將 數 值靹 轉 換 成 字 串 itoa() 與 gcvt()- 範 例[ 程 式 範 例 Proj11-9] 將 數 值靹 轉 換 成 字 串 的 示 範執 行 畫 面 :ć


將 數 值靹 轉 換 成 字 串 itoa() 與 gcvt()- 範 例 #include "stdafx.h“ #include "stdio.h“ #include "stdlib.h" #include "<strong>str</strong>ing.h" int main(){ int i=100; double f=100.55; <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[100]; <<strong>str</strong>ong>char</<strong>str</strong>ong> temp[20]; <strong>str</strong>cpy(<strong>str</strong>," 下 列 是 數 值靹 轉 換 成 字 串 的 結 果 ,ā 整 數 :ć"); itoa(i,temp,10); //--- 將 整 數 轉 成 字 串 後 放 到 temp 中 <strong>str</strong>cat(<strong>str</strong>,temp); //--- 將 整 數 轉 成 字 串 後 與 <strong>str</strong> 結 合 <strong>str</strong>cat(<strong>str</strong>,", 浮顏 點 數 :ć"); gcvt(f,10,temp); //--- 將 浮顏 點 數 轉 成 字 串 放 到 temp 中 <strong>str</strong>cat(<strong>str</strong>,temp); //--- 將 浮顏 點 數 轉 成 字 串 後 與 <strong>str</strong> 結 合 puts(<strong>str</strong>); system("pause"); }


尋 找 字 串 中 的 字 元 與 字 串在 C 當 中 提 供 了 <strong>str</strong>chr() 與 <strong>str</strong><strong>str</strong>() 函 式 ( 定 義 於<strong>str</strong>ing.h 檔 案頥 ) 來 搜 尋 字 串 中 的 字 元 或 是 字 串 ,ā 如 果找 的 到 則 傳 回 該 字 / 字 串 第 一 個鞄 出 現 的 位 置 / 位 址 ă例 如 :ć <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>ing[] = "The quick brown dog jumps overthe lazy fox"; <<strong>str</strong>ong>char</<strong>str</strong>ong> <strong>str</strong>[] = "lazy";<<strong>str</strong>ong>char</<strong>str</strong>ong> ch = 'r';此 時頗 如 果 使 用 <strong>str</strong>chr( <strong>str</strong>ing, ch ) 則 會 傳 回 12( 表 示<strong>str</strong>ing 中 的 第 12 個鞄 字 ,ā 也 就 是 <strong>str</strong>ing[11] 的 意 思 ),ā 而<strong>str</strong><strong>str</strong>( <strong>str</strong>ing, <strong>str</strong> ) 則 會 傳 回 一 個鞄 指 向 該 字 串 的 指 標(Pointer,ā 請 參 考 下 一 章 )ă


尋 找 字 串 中 的 字 元 與 字 串 - 範 例問 題 說 明 :ć 設 計 一 程 式 可 以 將 一 字 串 中 的 子 字串 替 換 成 使 用 者 輸 入 的 字 串 ,ā 就 像 word 或 是 文字 編 輯 器 的 [ 取 代 ] 功 能 ă執 行 畫 面 :ć


尋 找 字 串 中 的 字 元 與 字 串 - 範 例 #include "stdafx.h“ #include "stdio.h“ #include "stdlib.h" #include "<strong>str</strong>ing.h" int main() //--- 字 串 替 換 的 示 範 { <<strong>str</strong>ong>char</<strong>str</strong>ong> text[]="The quick brown dog jumps over the lazy fox";<<strong>str</strong>ong>char</<strong>str</strong>ong> result[200]=""; //-- 最 後 結 果 <<strong>str</strong>ong>char</<strong>str</strong>ong> soutext[20]; //-- 搜 尋 的 目 標 文 字 <<strong>str</strong>ong>char</<strong>str</strong>ong> reptext[20]; //-- 取 代 的 文 字 <<strong>str</strong>ong>char</<strong>str</strong>ong> *pdest; //--- 字 元 指 標 變 數 ,ā 請 參 考 下 一 章 int pos=<strong>str</strong>len(text); printf(" 原鞝 文 為 :ć%s\n",text); printf(" 請 輸 入 目 標 文 字 :ć"); gets(soutext); printf(" 請 輸 入 取 代 文 字 :ć"); gets(reptext);


尋 找 字 串 中 的 字 元 與 字 串 - 範 例while(pos>0){ pdest=<strong>str</strong><strong>str</strong>(text,soutext); //--- 傳 回 搜 尋 到 的 指 標pos=(int)(pdest - text + 1); //--- 轉 換 成 所 出 現 的 位 置if(pos>0) //--- 在 text 中 有 找 到 soutext 文 字 { text[pos-1]='\0'; //--- 將 找 到 之 處 設 為 結 束 <strong>str</strong>cat(result,text); //--- 將 開 頭 複 製 到 結 果 區 <strong>str</strong>cat(result,reptext); //--- 加 入 取 代 的 文 字 <strong>str</strong>cpy(&text[0],&text[pos+<strong>str</strong>len(soutext)-1]);//--- 跳 過 前 面 所 有 的 文 字 } } }<strong>str</strong>cat(result,text); //--- 結 合 剩 下 最 後 的 文 字printf(" 取 代 後 的 字 串 為 :%s\n", result);system("pause");


本 章 結 束Q&A 討 論 時頗 間

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!