在 C 語言中修剪字串
本文將介紹幾種在 C 語言中修剪字串的方法。
在 C 語言中使用自定義函式修剪字串的方法
字串修剪函式並不是標準 C 庫字串實用程式的一部分,也不是由符合 POSIX 標準的函式提供的,所以需要自己實現這些函式。在這個例子中,我們實現了名為 trimString
的函式,該函式接受一個單一的 char
指標引數,並返回修剪後的字串指標。注意,我們作為呼叫者,負責傳遞可以修改的字串。在本例中,我們使用 strdup
來複制 str1
,當字串被使用時,應該使用 free
呼叫來釋放它。
trimString
函式的實現是這樣的,它對字串的字元逐個進行遍歷,當給定的是一個空格時,它將指標遞增一個。簡而言之,這個 while
迴圈將 char
指標點移動到第一個非空格字元,修剪字串的字首。接下來,檢查增量指標的值是否等於 null,意味著給定的字串沒有非空格字元;因此我們返回 null 表示錯誤情況。隨後的 while
迴圈通過逐個向後移動字串末端的指標來刪除字串末端的空格。一旦迴圈遇到非空格字元,它就停止,下一條語句將 0
字元放在它的末尾。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.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 <stdio.h>
#include <stdlib.h>
#include <ctype.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
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn