# 字元字串 ## 字元 ### 如何宣告? ```c char c; ``` --- ### 初始化 ```c char c='A'; ``` --- ### ASCII ![](https://i.imgur.com/VYZRlXE.png) 列幾個重點: * 'A'=65 * 'Z'=90 * 'a'=97 * 'z'=122 * '0'=48 * '9'=57 --- ### 好用字元函式 要引入<cctype.h>函式庫 | 函示 | 用處 | |:-------------- |:------------------------------------- | | isalnum(字元) | 字元是否為字母或數字 :star: | | isalpha(字元) | 字元是否為字母 :star: | | isblank(字元) | 字元是否為白空白 :star: | | iscntrl(字元) | 字元是否為控制字元 (function ) | | isdigit(字元) | 字元是否為數字 (function ) :star: | | isgraph(字元) | 字元是否有形狀 (function ) | | islower(字元) | 字元是否為小寫字母 (function ) :star: | | isprint(字元) | 字元是否為可列印 | | ispunct(字元) | 字元是否為標點符號 :star: | | isspace(字元) | 字元是否為空白/Tab | | isupper(字元) | 字元是否為大寫字母 :star: | | isxdigit(字元) | 字元是否為16進位數字 | --- ## 字串 ### 宣告 字串是由字元組合而成的。 字串要用字元陣列來宣告 ``` char 變數名稱[陣列大小] ``` 舉例: ```c char c[256]; ``` --- ### 初始化 ```c char c[256]="Hello world" ``` | c[0] | c[1] | c[2] | c[3] | c[4] | c[5] | c[6] | c[7] | c[8] | c[9] | c[10] | c[11] | |:----:|:----:|:----:|:----:|:----:|:---- |:----:|:----:|:----:|:----:|:-----:|:-----:| | 'H' | 'e' | 'l' | 'l' | 'o' | ' ' | 'w' | 'o' | 'r' | 'l' | 'd' | '\0' | 字串的最後一格都是用'\0'代表結束。 --- 如果要輸入中文字 ```c char c[256]="林佳龍" ``` :::info 記得: 字元要加`' '` 字串要加`" "` ::: --- ### 字串輸入與輸出 輸入用%s輸入。 舉例: ```c int main(){ char name[20]; scanf("%s",name) printf("%s",name); return 0; } ``` 輸入 ``` Hello ``` 輸出: ``` Hello ``` --- 如果要讀入的有空白怎麼辦? 就要使用gets()函示 ``` gets(字串名稱(指標)); ``` stdin標準輸入,也可以說是從鍵盤讀取的概念。 舉例: ```c= #include <stdio.h> int main(){ char name[20]; gets(name); printf("%s",name); return 0; } ``` 輸入: ``` Hello world ``` 輸出: ``` Hello world ``` --- 依序輸出字串的每一個字元。 用for迴圈走遍全部的字串 ```c= #include <stdio.h> int main(){ char name[20]; fgets(name, 20, stdin); for(int i=0;i<20;i++){ printf("%c",name[i]); } return 0; } ``` 輸出特定字元 ```c= #include <stdio.h> int main(){ char name[20]; fgets(name, 20, stdin); for(int i=0;i<20;i++){ if(name[i]=='o'){ printf("%d %c\n",i,name[i]); } } return 0; } ``` 輸入: ``` Hello world ``` 輸出: ``` 4 o 7 o ``` --- ## 字串好用函式 要引入<[string.h](https://zh.wikipedia.org/zh-tw/String.h)>函式庫 ### strlen() ```c strlen(字串名稱(指標)) ``` 回傳字串的長度 舉例: ```c= #include <stdio.h> #include <string.h> int main(){ char name[20]; scanf("%s",name); printf("%d",strlen(name)); return 0; } ``` 輸入: ``` chisc ``` 輸出: ``` 5 ``` --- ### memset() ``` memset(字串名稱(指標),要覆蓋的字元,要覆蓋的長度); ``` 將字串的內的一部分位置換成你要求的字元 舉例: ```c= #include <stdio.h> #include <string.h> int main(){ char name[50]="Hello everyone"; printf("%s\n",name); memset(name,'$',9); printf("%s",name); return 0; } ``` 輸出: ``` Hello everyone $$$$$$$$$ryone ``` --- ### strcpy() ``` 1.strcpy(字串a名稱, 字串b名稱); 2.strcpy(字串a名稱,要複製的字); ``` 將b字串的內容複製到a字串。 舉例: ```c= #include <stdio.h> #include <string.h> int main (){ char str1[]="Sample string"; char str2[40]; char str3[40]; strcpy(str2,str1); strcpy(str3,"copy successful"); printf("str1: %s\n str2: %s\n str3: %s\n",str1,str2,str3); return 0; } ``` --- 要引入 <[stdlib.h](https://zh.wikipedia.org/wiki/Stdlib.h)> 函式 ### atoi() ``` atoi("字串名稱"); ``` 將字串轉成int 舉例: ```c= #include <stdio.h> #include <stdlib.h> int main (){ char str1[]="111"; int a; a=atoi(str1); printf("%d",a); return 0; } ``` ###### tags: `中和高中`