專案開發常見字串處理模型 兩頭堵模型

2021-09-12 09:22:16 字數 2278 閱讀 4521

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...