C语言字符串工具箱DIY之剔除字符串首尾的空白字符的str_trim函数
@Header File Named "string_toolbox.h"
Contents of File "string_toolbox.h"
Are as follows:
#ifndef STRING_TOOLBOX_H_INCLUDED
#define STRING_TOOLBOX_H_INCLUDED
char *str_trim(const char *str);
#endif
@Source File Named "string_toolbox.c"
Contents of File "string_toolbox.c"
Are as follows:
#include "string_toolbox.h"
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
char *str_trim(const char *str)
{
size_t
i = 0,
j = strlen(str),
k = 0,
new_lenth;
// @Comment_1
while(isspace(str[i])){
// @Comment_2
++i;
}
if(i == j) return "";
// @Comment_3
while(isspace(str[--j]));
// @Comment_4
new_lenth = j - i + 1;
// @Comment_5
char *result = (char *)
malloc(new_lenth + 1);
while(k < new_lenth){
result[k++] = str[i++];
}
result[k] = '\0';
return result;
}
@Source File for Testing Named "main.c"
Contents of File "main.c"
Are as follows:
#include "string_toolbox.h"
#include <ctype.h>
#include <string.h>
#define STR_CAT3(d, s1, s2, s3) (strcat(strcat(strcat(d, s1), s2), s3))
int main()
{
char
*str1 = "1",
*str3 = "3",
*str2[4] = {
" \t 2\t2 \n \v \t ", // 12 23
" \t 22 \n \v \t ", // 1223
" \t 2 \n \v \t ", // 123
" \t \n \v \t " // 13
};
int i = 0;
while(i < 4){
char dest_buf[8] = {'\0'};
printf("%s\n",
STR_CAT3(dest_buf,
str1,
str_trim(*(str2+i)),
str3)
);
++i;
}
printf("%d\n", isspace('\0')); // 0
return 0;
}
Postscripts
(1) size_t is type_alias of "unsigned int".
(2) Function void *malloc(size_t n_bytes); is declared in <stdlib.h>.
It is used to dynamically allocate memory.
(3) Function size_t strlen(const char *str); is declared in <string.h>.
It counts how many valid charaters (that is the amount of charaters before '\0') are in this string.
(4) Function char *strcat(char *destination_string_buf, const char *source_string); is declared in <string.h>.
It appends the source_string to the ending of the destination_string_buf on '\0'. The destination_string_buf should contain a C string, and be large enough to contain the concatenated resulting string.
(5) Function int isspace(int c); is declared in <ctype.h>.
It checks whether c is a white-space character. For the "C" locale, white-space characters are any of :
' ' | (0x20) | space (SPC) |
'\t' | (0x09) | horizontal tab (TAB) |
'\n' | (0x0a) | newline (LF) |
'\v' | (0x0b) | vertical tab (VT) |
'\f' | (0x0c) | feed (FF) |
'\r' | (0x0d) | carriage return (CR) |
(5) Details of Indexed Comments (Like @Comment_N) Above
- 原字符串全部可访问的下标范围为闭区间[0, strlen(str)];
- printf("%d\n", isspace('\0')); 会输出0, 即'\0'不被作为空白字符;
- 满是空白字符,精简后即是空字符串咯;
- 因为isspace('\0')为假, 因此应直接从'\0'的前一个字符开始检测空白;
- 精简后得到的新字符串全部可访问的下标范围为闭区间[0, new_lenth];
Copyright NOT Fully Reserved © yawenunion@whatever.com On 20180403