K&Rの演習1-18に進みます
入力の各行から末尾の空白とタブを削除し、完全に空白の行を削除するプログラムを作成します。
これは私がこれまでに思いついたものです
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int main () {
int len;
char line[MAXLINE];
while (getline(line, MAXLINE) > 0) {
printf("%s", line);
}
return 0;
}
int getline(char s[], int lim) {
int c, i, lastNonBlankIndex;
lastNonBlankIndex = 0;
for (i=0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
if (c != ' ' && c != '\t') {
lastNonBlankIndex = i + 1;
}
s[i] = c;
}
if (i != lastNonBlankIndex) {
i = lastNonBlankIndex;
c = '\n';
}
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
行に空白またはタブしかない場合に何を返す必要があるかわからなかったため、2番目の部分は難しいように聞こえました。結局のところ、0を返すと、getline()
呼び出しが停止します。#define
これは、などのを設定する必要がある場所でしょうかALL_BLANKS
。
とにかく、実際の主な質問に対して、これは行から末尾の空白とタブを削除する正しい方法ですか?いくつかの入力を実行しましたが、うまくいったようです。ただし、改行を含むテキストをコピーしてCLに貼り付けると、すべてがつなぎ合わされて表示されます。また、CLに行を入力してEnterキーを押すと、自動的に印刷されます。行の配列を作成し、完了したらループして印刷する必要がありますか?