1. 程式人生 > >C 實現 刪除字串空白符的函式 strtrim

C 實現 刪除字串空白符的函式 strtrim

說在前面的話

字串操作在很多C語言比賽裡面都有涉及,最近公眾號裡面的C語言比賽,都是兩個關於字串操作的題目,希望大家認真看題目。

直接上程式碼

/*************************************************************************
	> File Name: trim.c
	> Author: 
	> Mail: 
	> Created Time: Mon 12 Nov 2018 10:16:04 AM CST
 ************************************************************************/

#include<stdio.h>

/*****************************************************************************
 函 數 名  : strtrim
 功能描述  : 刪除行首、行尾空白符號
 輸入引數  : char *is  
 輸出引數  : 無
 返 回 值  : char *
 呼叫函式  : 
 被調函式  : 
 
 修改歷史      :
  1.日    期   : 2018年11月12日
    作    者   : strtrim
    修改內容   : 新生成函式

*****************************************************************************/
char * strtrim(char *s) {
    char *p = s;
    char *q = s;

    //去掉行首的空格
    while (*p==' ' || *p=='\t') 
        ++p;
    //賦值
    while ((p != NULL)&&(q != NULL)&&(*p != '\0')&&(*p != '\0'))
    {
        *q++ = *p++;
    };

	//刪除'\0'字元 注意是 -2 上面q++是先操作再自加
    q -= 2;
    //去掉行末的空格
    while (*q==' ' || *q=='\t') 
        --q;
    //給字串新增字元結束標誌
    *(q+1) ='\0';
    //這裡的return s要注意看好
    //因為p q經過一系列操作後,已經不是原來的位置,越界了 ,s還在原來位置,所以return s才是正確的。
    return s;
}

/*****************************************************************************
 函 數 名  : strtrimc
 功能描述  : 刪除字串空白符,包括行首和行尾
 輸入引數  : char * s
 輸出引數  : 無
 返 回 值  : char *
 呼叫函式  : 
 被調函式  : 
 
 修改歷史      :
  1.日    期   : 2018年11月12日
    作    者   : strtrim
    修改內容   : 新生成函式

*****************************************************************************/
char * strtrimc( char * s )
{
    char * p1 = s;
	char * p2 = s;
	while(*p1 != '\0')
	{
		while(*p1 == ' ' || *p1 == '\t')
		{
			p1 ++;
		}
		* p2 ++ = *p1 ++;
	}
	*p2 = '\0';
	return (s);
}
void main(void)
{
	char str[1000] = {" adf asdfasldf jjjjjjjjj    iiii "};
	char str1[1000] = {" adf asdfasldf jjjjjjjjj    iiii "};
	puts("Start main.");
    printf("%s\n",strtrimc(str));
	printf("%s\n",strtrim(str1));
}

注意問題

1 常量區

剛開始的時候,我寫的是char * s = "adfasdfasdfsf adfasdf adfasdfad ";
然後出現段錯誤,這裡定義的s,儲存在的是常量區,所以不能做賦值等操作,大家對字串操作的時候要特別注意。

2指標的返回值問題

在這裡插入圖片描述
原來我返回的是p1 ,p1 p2 s原來是相等的,但是經過一系列運算後,他們的值已經不相等了,他們的值如上面顯示那樣,所以返回值一直要返回s。