iT邦幫忙

0

【從零開始的 C 語言筆記】第十五篇-String 函式庫介紹與應用

  • 分享至 

  • xImage
  •  

不怎麼重要的前言

上一篇我們介紹了array的延伸應用,利用字元陣列我們可以當作儲存字串的工具。

今天我們來介紹一下字串(String)相關的應用--String函式庫!


String 函式庫

<string.h>是一個包含了許多字串應用的函式庫,這個函式庫可以讓你複製一個字串的內容到另一個字串、合併字串、分割字串、計算字串長度、比較字串是否相等,這些都可以在<math.h>中找到對應函式來協助處理,可以省去很多不必要的麻煩。

  1. 介紹

(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」)
  1. 實際應用
#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;
 }

https://ithelp.ithome.com.tw/upload/images/20211028/20142565L8sGgLI7I6.png


辛苦看到這裡的你,如果覺得比較難懂,可以參考上面的程式碼,或者自己測試看看喔!

下一篇我們來介紹什麼是二維Array!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言