C聖書---入力行の末尾のスペースとタブを削除し、完全にスペースの行を削除します
3178 ワード
ソース
各入力行の末尾のスペースとタブを削除し、完全にスペースの行を削除するプログラムを作成します.
getline関数は、テキスト行を読み込んだときにその行の長さを返し、ファイル終了子に遭遇したときに0を返すことができます.
0は有効な行長ではないので、フラグファイルの終了フラグとすることができる.
行ごとに、少なくとも1文字を含み、改行のみを含む行の長さは1です.
remove関数は、文字lineの末尾のスペースとタブを削除し、新しい長さを返します.
この長さ>0の場合、ラインにスペースやタブではない他の文字があることを示し、プログラムはこれを後で印刷します.
を選択します.そうしないと、この行は完全にスペースとタブで構成されていることを示します.プログラムはこの行を無視します.
remove関数はまず''を見つけます
その後、1つの位置を後退させ、その後、この関数は、スペースまたはタブではない文字を見つけるまで、後ろから前にチェックします(i<0)
i>=0の場合、少なくとも1つの文字があることを示し、その後、関数removeは改行文字と文字列終了文字を入力行に戻し、変数iを返します.
各入力行の末尾のスペースとタブを削除し、完全にスペースの行を削除するプログラムを作成します.
getline関数は、テキスト行を読み込んだときにその行の長さを返し、ファイル終了子に遭遇したときに0を返すことができます.
0は有効な行長ではないので、フラグファイルの終了フラグとすることができる.
行ごとに、少なくとも1文字を含み、改行のみを含む行の長さは1です.
1.次のコードは、スペースやタブを本当に削除していないだけで、表示されないようにします.#include
//#include
#define MAXLINE 1000
int getline(char s[], int lim);
int main(){
int len,i;
char line[MAXLINE];
while( (len = getline(line,MAXLINE))> 0){ // ,len
//printf("%s",line);
for(i = 0; i < len; i++) //
printf("%c",line[i]);
//printf("
");
}
//system("pause");
return 0;
}
int getline(char s[], int lim){
int i,j,len;
char c;
for(i = 0; i < lim - 1 && (c = getchar())!= EOF && c != '
'; i++)
s[i] = c;
if(c == '
'){
s[i] = c;
i++;
}
s[i] = '\0';
len = i;//len
// , ,
for(j = i - 1; j >= 0;j--){
if(s[j] != ' ' && s[j] != '\t') // , ' ' '\t'
break; // ,
if(s[j] == ' ' || s[j] == '\t') // ' ' '\t', --
len--;
}
return len;
}
2.本の答え#include
#include
#define MAXLINE 1000
/* , ,
*/
int getline(char s[],int lim);
int remove(char s[]);
int main(){
char line[MAXLINE];
while( getline(line,MAXLINE) > 0){ //
if(remove(line) > 0)
printf("%s",line);
}
system("pause");
return 0;
}
int getline(char s[], int lim){
int i;
char c;
for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '
'; i++)
s[i] = c;
if(c == '
'){
s[i] = c;
i++;
}
s[i] = '\0';
return i;
}
int remove(char s[]){
int i = 0;
while(s[i] != '
') // '
','\0'
i++;
i--; //back off from '
'
// ' ' '\t', i
while( i >=0 && (s[i] == ' ' || s[i] == '\t' )){
i--;
}
//is it a noblank line?
if(i >= 0){ // i>=0, ,
i++;
s[i] = '
'; //put newline character back
i++;
s[i] = '\0'; //terminate the string
}
return i;// newline
}
remove関数は、文字lineの末尾のスペースとタブを削除し、新しい長さを返します.
この長さ>0の場合、ラインにスペースやタブではない他の文字があることを示し、プログラムはこれを後で印刷します.
を選択します.そうしないと、この行は完全にスペースとタブで構成されていることを示します.プログラムはこの行を無視します.
remove関数はまず''を見つけます
その後、1つの位置を後退させ、その後、この関数は、スペースまたはタブではない文字を見つけるまで、後ろから前にチェックします(i<0)
i>=0の場合、少なくとも1つの文字があることを示し、その後、関数removeは改行文字と文字列終了文字を入力行に戻し、変数iを返します.