当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言字符串工具箱DIY之剔除字符串首尾的空白字符的str_trim函数

C语言字符串工具箱DIY之剔除字符串首尾的空白字符的str_trim函数

2018年04月05日  | 移动技术网IT编程  | 我要评论

利比里亚内战,警方破获网络招嫖案,罐车爆炸

@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

  1. 原字符串全部可访问的下标范围为闭区间[0, strlen(str)];
  2. printf("%d\n", isspace('\0')); 会输出0, 即'\0'不被作为空白字符;
  3. 满是空白字符,精简后即是空字符串咯;
  4. 因为isspace('\0')为假, 因此应直接从'\0'的前一个字符开始检测空白;
  5. 精简后得到的新字符串全部可访问的下标范围为闭区间[0, new_lenth];

 

Copyright NOT Fully Reserved © yawenunion@whatever.com On 20180403

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网