编写函数:清除字符串首尾的空白符 (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里面再返回。

猜你喜欢

转载自blog.csdn.net/weixin_43737185/article/details/84712905