C程序设计语言(第2版)----课后练习题1-18

练习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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值