为什么我的代码为什么不删除字符数组中的空格?

时间:2019-02-17 17:13:39

标签: c

在C编程语言手册的练习1-19中

该练习的目的是创建一个程序,该程序删除所有尾随的空格和空格,并完全删除空白行。

我的问题是,程序看到空白时,便删除了空白,并用'\ 0'替换了以下输入,而不仅仅是数组左侧的位置。

我已经尝试使用trim方法并将所有内容放入for循环中,并使用一个名为TrailingBlanks的变量。我使用了TrailingBlanks并设置了一条if else语句,该语句表示字符数组的输入是''还是||。然后将数组从s [i-trailingBlanks]设置为'\ 0'。

那么,如何使我的代码从字符数组中删除所有空格和制表符?

#include <stdio.h>

#define MAXLINE 1000
#define eOF '~'

int getLine(char s[] , int maxline);
void copy(char to[], char from[]);
void trim(char s[], int maxline);

int main() {
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while ((len = getLine(line, MAXLINE)) > 0)
        if (len > max) {
            max = len;
            copy(longest, line);
            trim(longest, MAXLINE);
        }

    if (max > 0)
        printf("%s", longest);

    printf("%d", max);

    return 0;
}

int getLine(char s[], int lim) {
    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;
}

void copy(char to[], char from[]) {
    int i;

    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

void trim(char s[], int lim) {
    int i, c, trailingBlanks;

    trailingBlanks = -1;

    for (i = 0; i < lim - 1 && (c = s[i]) != eOF && c != '\n'; ++i)
        if (c == ' ' || c == '\t') {
            ++trailingBlanks;
            s[i-trailingBlanks] = '0';
        } else
            trailingBlanks = 0;

    s[i] = c;
}

期望:擦除空白或标签,并用下一个非空白或标签的字符填充它们。

会发生什么:空格返回一个空格,并用'\ 0'代替,然后继续用'\ 0'填充所有剩余的字符槽,甚至算在内。

编辑:我已缩进代码或可读性(chqrlie)

0 个答案:

没有答案