C 語言中檢查字串是否包含子字串

Jinku Hu 2023年10月12日
  1. 使用 strstr 函式來檢查一個字串是否包含 C 語言中的子字串
  2. 使用 strcasestr 函式檢查字串是否包含子字串
  3. 使用 strncpy 函式複製一個子字串
C 語言中檢查字串是否包含子字串

本文將介紹幾種在 C 語言中檢查一個字串是否包含給定子字串的方法。

使用 strstr 函式來檢查一個字串是否包含 C 語言中的子字串

strstr 函式是 C 標準庫字串工具的一部分,它被定義在 <string.h> 頭中。該函式接受兩個 char 指標引數,第一個表示要搜尋的字串,另一個表示要搜尋的字串。它找到給定子字串的第一個起始地址,並返回對應的 char 指標。如果在第一個引數字串中沒有找到子字串,則返回 NULL 指標。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strstr(tmp, "literal");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

輸出:

found substring at address 0x55edd2ecc014

使用 strcasestr 函式檢查字串是否包含子字串

strcasestr 並不是標準庫功能的一部分,但它是作為 GNU C 庫的一個擴充套件來實現的,可以用 _GNU_SOURCE 巨集定義來表示。定義後,我們就可以呼叫 strcasestr 函式來查詢給定子字串的首次出現。但請注意,這個函式會忽略兩個字串的大小寫。

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strcasestr(tmp, "LITERAL");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

輸出:

found substring at address 0x55edd2ecc014

使用 strncpy 函式複製一個子字串

或者,可以使用 strncpy 函式將給定的子字串複製到一個新的緩衝區。它需要三個引數,第一個引數是目標 char 指標,複製的子字串將被儲存在那裡,第二個引數是源字串,最後一個參數列示複製的第一個位元組數。第二個引數是源字串,最後一個參數列示最多複製的第一個位元組數。請注意,如果在源字串的第一個位元組中沒有找到空位元組,那麼目標字串就不會以空結束。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

輸出:

This
string lit
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C String