在 C 語言中截斷字串

Jinku Hu 2023年10月12日
在 C 語言中截斷字串

本文將介紹有關如何在 C 語言中截斷字串的多種方法。

使用自定義函式和指標算術來截斷字串

由於 C 語言中的字串只是以空位元組-\0 終止的字元陣列,因此我們可以實現一個自定義函式,該函式將當前指標移至字串開頭指定的位數,並返回一個新的指標值。

但是請注意,有兩個問題。第一個是我們需要從左或右截斷給定字串的選項,第二個是從字串的右側移動指標是不夠的,因為需要插入空位元組來表示結尾。因此,我們定義了 truncString 函式,該函式將字串和幾個字元從字串中截斷。該數字可以為負,表示要從哪邊刪除給定的 chars。接下來,我們使用 strlen 函式檢索字串長度,這意味著使用者負責傳遞有效字串。然後,我們將長度與要截斷的字元數進行比較,然後繼續進行指標操作。

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

char *truncString(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str = str + pos;
    else
      str[len + pos] = 0;
  }

  return str;
}

int main(void) {
  char *str1 = "the string to be truncated";

  printf("%s\n", str1);
  printf("%s \n", truncString(strdupa(str1), 4));
  printf("%s \n", truncString(strdupa(str1), -4));

  exit(EXIT_SUCCESS);
}

輸出:

the string to be truncated
string to be truncated
the string to be trunc

我們僅將 0 值分配給通過減去字串長度和傳遞的數字而得出的字元位置。因此,我們移動了字串的結尾,並可以使用舊指標列印其值。

另外,我們可以用相同的原型實現類似的功能 truncString2,但將字串截斷為作為第二個引數傳遞的字元數。數字的符號表示形成新字串的那一側,即,正整數表示左側,而負整數表示相反。

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

char *truncString2(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str[pos] = 0;
    else
      str = &str[len] + pos;
  } else {
    return (char *)NULL;
  }

  return str;
}

int main(void) {
  char *str2 = "temporary string variable";

  printf("%s\n", str2);
  printf("%s \n", truncString2(strdupa(str2), 6));
  printf("%s \n", truncString2(strdupa(str2), -6));

  exit(EXIT_SUCCESS);
}

輸出:

the string to be truncated
string to be truncated
the string to be trunc
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C String