編寫函式:清除字串首尾的空白符 (Append Code)
阿新 • • 發佈:2018-12-02
Problem D: 編寫函式:清除字串首尾的空白符 (Append Code)
Time Limit: 1 Sec Memory Limit: 2 MB
Submit: 9778 Solved: 4069
[Submit][Status][Web Board]
Description
在C語言中,將ASCII字符集中的製表符(’\t’)、回車符(’\r’)、換行符(’\n’)、垂直製表符(’\v’)、換頁符(’\f’)和空格字元(’ ')稱作空白符。你的任務是讀入每行字串,去掉行首和行尾的連續空白符,但是在任意非空白符中間的空白符不要去除。
編寫一個函式trim(),把一個串首尾的空白符清除掉:
原型:char * trim(char *s);
功能:去掉字串s首尾的連續空白符,s中在任意非空白符中間的空白符不要去除,並將s的首地址返回。
函式的呼叫格式見“Append Code”。
Input
輸入為多行,每行為一個串(不超過100個字元),至某行輸入的非空白符僅為“END”結束。
Output
輸出為多行,為每行輸入的去掉前後空白符的串。“END”也輸出。
Sample Input
abcdefg
12345678
XYZ
abc 123
END
Sample Output
abcdefg
12345678
XYZ
abc 123
END
HINT
下面這些說法都是一個意思:“返回一個字串S”、“返回字串S的指標”、“返回字串S的首地址”。
Append Code
append.c,
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #define MAX_STR_LEN 1005 char * trim(char *s) { int i,j,k; char t[103]; for(i=0;i<strlen(s);i++) if(isspace(s[i])==0) break; for(j=strlen(s)-1;j>=0;j--) if(isspace(s[j])==0) break; for(k=0;i<=j;k++) {t[k]=s[i];i++;} t[k]='\0'; memset(s,0,sizeof s); strcpy(s,t); return s; } int main() { char str[MAX_STR_LEN], *p; do { gets(str); p = trim(str); puts(p); } while(strcmp(p, "END")); return 0; }
一開始想直接在s裡邊兒去掉然後返回s,但是過不了,於是採用pjj同學的建議,先放到另外一個t裡,然後stringcopy到s裡面再返回。