在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)