练习1-18 编写一个程序,编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行
#include <stdio.h>
#define MAXLEN 1000 //输入文本的最大字符量
int getline(char s[], int maxlen); //将当前键盘输入的句子储存到字符数组中,并返回每次输入句子长度(包含换行符)
int copy(char to[], char from[],int tolen); //将每次经过处理过后的字符数组存储到最终输出总字符数组中
int main()
{
int len, i=0;
int tolen = 0; //当前总输出字符数组长度;
char c_out[MAXLEN]; //总输出字符数组
char c_current[MAXLEN];
while ((len = getline(c_current,MAXLEN)) > 0) {
if (len > 2) {
for (i = len - 2; (c_current[i] == '\40' || c_current[i] == '\t') && (c_current[i - 1] == '\40' || c_current[i - 1] == '\t') && i > 0; i--)
c_current[i] = '\n';//将末尾连续的空格符以及制表符以换行符代替
//当i=0时,说明输入句子中全是空格或者制表符,此时忽略当前句子;当i>0时,说明输入的句子不全为空格或者制表符
if (i > 0) {
if ((c_current[i - 1] != '\40' || c_current[i - 1] != '\t')) {
if (c_current[i] == '\40' || c_current[i] == '\t')
c_current[i] = '\n';
tolen = copy(c_out, c_current, tolen);
}
}
}
else if (len == 2) {
if (c_current[0] != '\t' && c_current[0] != '\40')
tolen = copy(c_out, c_current, tolen);
}
//此时输入句子中只有换行符
else tolen = copy(c_out, c_current, tolen);
}
c_out[tolen] = '\0';
printf("%s", c_out);
return 0;
}
int getline(char s[], int maxlen) {
int i;
char c;
for (i = 0; (c = getchar()) != EOF && c != '\n' && i<maxlen-1; i++)
s[i] = c;
if (c == '\n')
s[i++] = c;
return i;
}
int copy(char to[], char from[], int tolen) {
int i = 0;
while ((to[tolen + i] = from[i]) != '\n')
i++;
tolen = tolen + i + 1;
return tolen;
}