C 實現 刪除字串空白符的函式 strtrim
阿新 • • 發佈:2018-11-20
說在前面的話
字串操作在很多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。