在 C 語言中截斷字串
Jinku Hu
2023年10月12日
本文將介紹有關如何在 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