上一篇我們介紹了array的延伸應用,利用字元陣列我們可以當作儲存字串的工具。
今天我們來介紹一下字串(String)相關的應用--String函式庫!
<string.h>是一個包含了許多字串應用的函式庫,這個函式庫可以讓你複製一個字串的內容到另一個字串、合併字串、分割字串、計算字串長度、比較字串是否相等,這些都可以在<math.h>中找到對應函式來協助處理,可以省去很多不必要的麻煩。
(1) 計算str長度
函式 | 說明 |
---|---|
size_t strlen(const char *str) | 計算str字串長度(不包含「\0」) |
(2) 複製字串
函式 | 說明 |
---|---|
char *strcpy(char *dest, const char *src) | 複製src的字串內容到dest中 |
char *strncpy(char *dest, const char *src, size_t n) | 複製src的字串前n個字元內容到dest中 |
(3) 合併字串
函式 | 說明 |
---|---|
char *strcat(char *dest, const char *src) | 將src字串的內容合併到dest字串尾 |
char *strncat(char *dest, const char *src, size_t n) | 將src字串的前n個字元內容合併到dest字串尾 |
(4) 字串比較
函式 | 說明 |
---|---|
int strcmp(const char *str1, const char *str2) | 會回傳一個整數值,若str1字串與str2字串完全相同時,會回傳0;若兩字串不相同時依照開頭字元的ascii code,回傳>0或<0之值。 |
int strncmp(const char *str1, const char *str2, size_t n) | 與strcmp類似,但只比較str1字串、str2字串的前n個字元 |
int strcmpi(char *str1, char *str2) | strcmp的延伸版,是不分大小寫字母的比較 |
int strncmpi(char *str1, char *str2, size_t n) | strncmp的延伸版,是不分大小寫字母的比較前n個字元 |
(5) 分割字串
函式 | 說明 |
---|---|
char *strtok(char *str, const char *delim) | 依照delim作為分割符,分割str字串 |
(6) 查找字元
函式 | 說明 |
---|---|
char *strchr(const char *str, char c) | 回傳str字串中第一個出現的c字元地址 |
size_t strcspn(const char *str1, const char *str2) | 回傳從頭開始在str1字串中,完全未出現str2中字元的字串長度 |
(7) 字母大小寫轉換
函式 | 說明 |
---|---|
char *strupr(char *str) | 將str字串中的字母全部轉換為大寫 |
char *strlwr(char *str) | 將str字串中的字母全部轉換為小寫 |
(8) 字串設定
函式 | 說明 |
---|---|
char *strset(char *str, char c) | 將str字串的字元全部轉換為c字元 |
char *strnset(char *str, char c, size_t n) | 將str字串的前n個字元全部轉換為c字元 |
char *strrev(char *str) | 將str字串中的全部字元顛倒(不含「\0」) |
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[10] = "12345";
printf("strlen: %d\n", strlen(str1));
char str2[] = "apple!";
char str3[] = "bird!";
strncpy(str2, str3, 4);
printf("strncpy: %s\n", str2);
char str4[] = "apple!";
char str5[] = "bird!";
strncat(str4, str5, 4);
printf("strncat: %s\n", str4);
char str6[] = "aaa";
char str7[] = "AAA";
printf("strcmp: %d\n", strcmp(str6, str7));
printf("strcmpi: %d\n", strcmpi(str6, str7));
char str8[] = "apple bird cat";
char c[]=" ";
char *token;
token = strtok(str8, c);
printf("strtok: %s\n", token);
token = strtok(NULL, c);
printf("strtok: %s\n", token);
token = strtok(NULL, c);
printf("strtok: %s\n", token);
char str9[] = "Hello World!";
char c2 = 'W';
printf("strchr: %p\n", strchr(str9, c2));
printf("strchr index: %d\n", strchr(str9, c2)-str9);
char str10[] = "abcDef";
strupr(str10);
printf("strupr: %s\n", str10);
char str11[] = "12345";
char c3 = 'c';
strset(str11, c3);
printf("strset: %s\n", str11);
char str12[] = "Hello World!";
strrev(str12);
printf("strrev: %s\n", str12);
return 0;
}