在 C 語言中截斷字串

Jinku Hu 2023年10月12日 C C String
在 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 
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相關文章 - C String