1. 程式人生 > >編寫函式:清除字串首尾的空白符 (Append Code)

編寫函式:清除字串首尾的空白符 (Append Code)

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裡面再返回。