strlen函式 :從記憶體的某個位置開始開始掃瞄,直到碰到第乙個字串結束符『0』為止,然後返回計數器值,返回的長度不包含'\0'
需求:編寫乙個函式,要求去除字串的前後空格
下面用二種方法實現:
1 建立乙個字元型陣列,用陣列去接收去除空格後的字串。
2 直接修改原字串,把空格刪除 (這樣做的前提是char* 指標所指向的記憶體空間必須可以被修改才行)。
1 建立乙個字元型陣列,用陣列去接收去除空格後的字串:
#define _crt_secure_no_warnings
#include
#include
#include
#include
int trimspace(char*str, char*newstr)
char* p = str; //不要直接修改形參指標,用乙個臨時變數去接收它的值,修改臨時變數
int count = 0;
if (str == null || newstr == null)
return 0;
int i = 0;
int j = strlen(p) - 1;
while (isspace(p[i]) && p[i] != '\0')//是空白符就往後走,直到找到第乙個不是空白字元的字元
i++;
} while (isspace(p[j]) && p[j] != '\0')//是空白符就往前走,直到找到第乙個不是空白字元的字元
count = j - i + 1;//計算去除二邊空白字元後的長度
strncpy(newstr, str + i, count);//從str的第i個開始,拷貝count個字元到newstr
newstr[count] = '\0';//別忘了在newstr後面加字串結束符 '\0'
return 1;
int main(void)
char *p = " abcd "; //字串的首尾都有空格
char arrstr[128]; //足以包含去除空格後的字串就可以
trimspace(p, arrstr);
printf("字串: %s \n", arrstr);
system("pause");
return;
2 直接修改原字串,把空格刪除 (這樣做的前提是char* 指標所指向的記憶體空間必須可以被修改才行):
int trimspace(char*str)
char* p = str; //不要直接修改形參指標,用乙個臨時變數去接收它的值,修改臨時變數
int count = 0;
if (str == null)
int i = 0;
int j = strlen(p) - 1;
while (isspace(p[i]) && p[i] != '\0')//是空白符就往後走,直到找到第乙個不是空白字元的字元
i++;
while (isspace(p[j]) && p[j] != '\0')//是空白符就往前走,直到找到第乙個不是空白字元的字元
j--;
count = j - i + 1;//計算去除二邊空白字元後的長度
strncpy(str, str + i, count);//直接修改str, 從str的第i個開始,拷貝count個字元到str
str[count] = '\0';//別忘了在newstr後面加字串結束符 '\0'
return 1;
這個函式直接修改str,所以必須保證傳入的字串str指向的記憶體空間是可寫的
通過記憶體四區知道:char *p = " abcd ";這樣字串會存在常量區,是不可修改的
char buf[128]; 這樣字串buf存在棧區,可以修改,所以在呼叫trimspace時可以用char陣列呼叫:
int main(void)
char buf = " abcd "; //字串的首尾都有空格
trimspace(buf);
printf("字串: %s \n", buf);
system("pause");
return;
空白字元包含:
' ' 空格
'\t' 水平製表符
'\n『 換行符
'\v' 垂直製表符
'\f' 換頁符
'\r' 回車符
posted on 2019-01-21 10:27收藏
C語言的專案開發模型(1) 字串兩頭堵
得到字串的長度,然後 1得到的是陣列的最大座標位置 j strlen inmybuff 1 指標從輸入字串的前面向後判斷,找到不是空格的地方 while isspace inmybuff i inmybuff i 0 指標從後往前尋找,找到不是空格的地方 while isspace inmybuff...
C語言提高19 字串模型 兩頭堵模型
strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置 可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域 開始掃瞄,直到碰到第乙個字串結束符 0 為止,然後返回計數器值 長度不包含 0 isspace 若引數c為空格字元,則返回true,否則返回null 此為巨集定義,非真正函式 ...
day4 字串的兩頭堵模型
方法一 int main01 while isspace p j p j 0 count j i 1 printf count d n count printf hello world n system pause return 0 求非空格的字串長度 方法二 api函式 void getcount...