练习1-18 编写一个程序,删除每个输入行末尾的空格以及制表符,并删除完全是空格的行。
Posted 杪杪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习1-18 编写一个程序,删除每个输入行末尾的空格以及制表符,并删除完全是空格的行。相关的知识,希望对你有一定的参考价值。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #define MAXLINE 1000 //允许输入行的最大长度
6
7 int get_Line(char line[], int maxline);
8
9 int removes(char s[]);
10
11 main()
12 {
13 char line[MAXLINE];
14 while(get_Line(line, MAXLINE) > 0)
15 if(removes(line) > 0)
16 printf("%s", line);
17 return 0;
18 }
19 // getline函数: 读一行读入到S中,并返回其长度
20 int get_Line(char s[], int lim)
21 {
22 int c, i, j;
23 j = 0;
24 for(i = 0; (c = getchar()) != EOF && c != ‘\n‘; ++i)
25 if(i < lim - 2)
26 {
27 s[j] = c;
28 ++j;
29 }
30 if(c == ‘\n‘)
31 {
32 s[j] = c;
33 ++j;
34 ++i;
35 }
36 s[j] = ‘\0‘;
37 return i;
38 }
39 //删除字符串的空格和制表符并返回新的长度
40 int removes(char s[])
41 {
42 int i;
43 i = 0;
44 while(s[i] != ‘\n‘ && i < MAXLINE-2) //查找‘\n‘在数组中对应的下标
45 ++i;
46 if(i != MAXLINE-2)
47 --i;
48 while(i >= 0 && (s[i] == ‘ ‘ || s[i] == ‘\t‘)) // 从字符串末尾起向前查找字符值不是‘‘和‘\t‘的字符所对应的下标
49 --i;
50 if(i >= 0)
51 {
52 ++i;
53 s[i] = ‘\n‘;
54 ++i;
55 s[i] = ‘\0‘;
56 }
57 return i;
58 }
存在不足:每次输入一行字符,处理结果会紧接着下一行输出,不太容易观看
以上是关于练习1-18 编写一个程序,删除每个输入行末尾的空格以及制表符,并删除完全是空格的行。的主要内容,如果未能解决你的问题,请参考以下文章