在 C 語言中修剪字串

Jinku Hu 2023年10月12日
  1. 在 C 語言中使用自定義函式修剪字串的方法
  2. 在 C 語言中使用另一個自定義函式來修剪字串
在 C 語言中修剪字串

本文將介紹幾種在 C 語言中修剪字串的方法。

在 C 語言中使用自定義函式修剪字串的方法

字串修剪函式並不是標準 C 庫字串實用程式的一部分,也不是由符合 POSIX 標準的函式提供的,所以需要自己實現這些函式。在這個例子中,我們實現了名為 trimString 的函式,該函式接受一個單一的 char 指標引數,並返回修剪後的字串指標。注意,我們作為呼叫者,負責傳遞可以修改的字串。在本例中,我們使用 strdup 來複制 str1,當字串被使用時,應該使用 free 呼叫來釋放它。

trimString 函式的實現是這樣的,它對字串的字元逐個進行遍歷,當給定的是一個空格時,它將指標遞增一個。簡而言之,這個 while 迴圈將 char 指標點移動到第一個非空格字元,修剪字串的字首。接下來,檢查增量指標的值是否等於 null,意味著給定的字串沒有非空格字元;因此我們返回 null 表示錯誤情況。隨後的 while 迴圈通過逐個向後移動字串末端的指標來刪除字串末端的空格。一旦迴圈遇到非空格字元,它就停止,下一條語句將 0 字元放在它的末尾。

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

char *trimString(char *str) {
  char *end;

  while (isspace((unsigned char)*str)) str++;

  if (*str == 0) return str;

  end = str + strlen(str) - 1;
  while (end > str && isspace((unsigned char)*end)) end--;

  end[1] = '\0';

  return str;
}

int main(void) {
  const char *str1 = "  temporary string     ";

  printf("%s\n", str1);

  char *tmp = strdup(str1);
  printf("%s\n", trimString(tmp));

  free(tmp);
  exit(EXIT_SUCCESS);
}

輸出:

  temporary string     
temporary string

在 C 語言中使用另一個自定義函式來修剪字串

與之前的修剪函式類似,trimString2 的實現是為了去除字串兩邊的空格。第一個 while 迴圈計算字串末尾的空格數,第二個迴圈將指標移動到第一個非空格字元。在迴圈語句的末尾,len 包含由 strndup 函式生成的修剪後的字串中的字元數。注意,從 strndup 函式返回的指標應被呼叫者釋放,以避免記憶體洩漏。

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

char *trimString2(char *str) {
  size_t len = strlen(str);

  while (isspace(str[len - 1])) --len;
  while (*str && isspace(*str)) ++str, --len;

  return strndup(str, len);
}

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

  printf("%s\n", str2);

  char *s = trimString2(str2);
  printf("%s\n", s);

  free(s);
  exit(EXIT_SUCCESS);
}

輸出:

     temporary string  
temporary string
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C String