欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

删除多余的空白

程序员文章站 2022-07-14 08:40:40
...

  删除行末的空格及制表符,并删除全是空格的行:

#include <stdio.h>

#define MAXLINE 1000 /* maximum input line length */

int mygetline ( char line[], int maxline );
int myremove ( char s[] );

int main ( void ) {
    int len; /* current line length */
    int length; /* remove returns length */
    char line[MAXLINE]; /* current input line */

    while ( ( len = mygetline ( line, MAXLINE ) ) > 0 ) {
        if ( ( length = myremove ( line ) ) > 0 ) {
            printf ( "%s", line );
        }
    }

    return 0;
}

int mygetline ( char s[], int lim ) { /* read a line into s, return length */
    int c, i;

    for ( i = 0; i < lim - 1 && ( c = getchar() ) != EOF && c != '\n'; ++i ) {
        s[i] = c;
    }

    if ( c == '\n' ) {
        s[i] = c;
        ++i;
    }

    s[i] = '\0';
    return i;
}

int myremove ( char s[] ) { /* 从字符串s中去掉结尾的空格符及制表符,并返回处理后的字符串长度 */
    int i;
    i = 0;

    while ( s[i] != '\n' ) { /* 到达行末 */
        ++i;
    }

    --i; /* 回退一个字符,当前i指向“/n”的前一个字符 */

    while ( i >= 0 && ( s[i] == ' ' || s[i] == '\t' ) ) {
        --i;
    }

    if ( i >= 0 ) { /* 至少含有一个字符 */
        ++i;
        s[i] = '\n'; /* 重新组织为一个新行 */
        ++i;
        s[i] = '\0'; /* 结束存储的字符串 */
    }

    return i;
}
相关标签: C和C++应用