天天看點

字元串中 去掉字元串前後空格以、'\t'(tab) C函數實作,附sscanf正則方式

一、問題描述:

   當讀取配置檔案的時候,fgets()一行一行的讀取檔案後,sscanf()會對讀取出來的這行字元串進行截取處理(此時sscanf()使用正規表達式處理字元串),但是當字元串的首位有空格或者‘\t’時候,後續字元串的比較時,會帶來不必要的麻煩。

二、舉例說明:

(提示:->表示開始  <-表示結尾  實際的配置檔案中并不存在,隻是為了更好的顯示檔案中有空格或者tab)

  配置檔案如下所示,起始位置有空格與'\t':

字元串中 去掉字元串前後空格以、'\t'(tab) C函數實作,附sscanf正則方式

程式中sscanf()并沒有 在正則中處理首位空格 ‘\t’:

字元串中 去掉字元串前後空格以、'\t'(tab) C函數實作,附sscanf正則方式
字元串中 去掉字元串前後空格以、'\t'(tab) C函數實作,附sscanf正則方式

在後續的對比操作中會有不必要的麻煩。

字元串中 去掉字元串前後空格以、'\t'(tab) C函數實作,附sscanf正則方式

是以在fgets()後面,sscanf()前 需要對讀出的linebuffer進行首位去除空格 ‘\t’的處理。

字元串中 去掉字元串前後空格以、'\t'(tab) C函數實作,附sscanf正則方式

三、代碼實作:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void trim(char *strIn, char *strOut){

        int i, j ;

        i = 0;

        j = strlen(strIn) - 1;

        while(strIn[i] == ' ' || strIn[i] == '\t')
                ++i;

        while(strIn[j] == ' ' || strIn[j] == '\t')
                --j;
        strncpy(strOut, strIn + i , j - i + 1);
        strOut[j - i + 1] = '\0';
}
void main()
{
        char *strIn = "         this is a test string    ";
        char strOut[100];
        trim(strIn,strOut);
        printf("*%s*\n",strOut);
}
           

當然也可以考慮 用sscanf的正規表達式完成對字元串前後空格、tab的删除。連結如下:

      sscanf正則去掉字元串前後空格https://blog.csdn.net/weixin_42167759/article/details/80379430

繼續閱讀