练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。

Posted liuhaiqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。相关的知识,希望对你有一定的参考价值。

 1 #include <stdio.h>
 2 #define MAXLINE 1000 //允许输入行的最大长度
 3 
 4 int get_Line(char line[], int maxline);
 5 void copy(char to[], char from[]);
 6 
 7 main()
 8 {
 9     int len; //当前行长度
10     int max; //目前为止发现的最长行的长度
11     char line[MAXLINE]; //当前的输入行
12     char longest[MAXLINE]; //用于保存最长的行
13 
14     max = 0;
15     while ((len = get_Line(line, MAXLINE)) > 0)
16         printf("line‘s len %d ,  line: %s", len, line);
17     if(len > max)
18     {
19         max = len;
20         copy(longest, line);
21     }
22     if(max > 0)
23         printf("longest‘s len %d ,longest: %s
", max, longest);
24     return 0;
25 
26 }
27 // getline函数: 读一行读入到S中,并返回其长度
28 int get_Line(char s[], int lim)
29 {
30     int c, i, j;
31     j = 0;
32     for(i = 0; (c = getchar()) != EOF && c != 
; ++i)
33     {
34         if(i < lim - 2)
35         {
36             s[j++] = c;
37         }
38     }//这里getline修改后,i可以大于lim的限制,只计数,不保存字符
39     if(c == 
)
40     {
41         
42         s[j++] = c;        
43         ++i;
44     }
45     s[j] = ;
46     return i;
47 }
48 
49 //copy 函数:将from复制到to;这里假定to足够大
50 
51 
52 void copy(char to[], char from[])
53 {
54     int i;
55     i = 0;
56     while ((to[i] = from[i]) != )
57     ++i;
58 }

1.打印任意长度的输入行的长度 ,是指这个输入行的长度不受限制,循环语句 ,不再检查字符数是否超出数组s的限制,getline能返回任意长的输入行的长度并能存储尽可能多的输入行内容。

2.用于判断字符串数组是否还有空位置的表达式改成了 if(i  < lim - 2) ,原因是 :数组s的最后一个小标是 lim-1  数组s中有lim个元素且我们已经读去了输入的字符。 i < lim -2 是将数组s里给换行符留个位置,即 s[lim - 2] = ‘ ‘;还要给字符串结束符留出一个位置,即s[lim -1] = ‘‘.

3.getline函数已包含在头文件stdio.h,需要更改一下函数名称

 

以上是关于练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。的主要内容,如果未能解决你的问题,请参考以下文章

linux 正则通配符

在给定行号的文本文件中打印行

模糊寻找文本行子程序,返回以换行符分隔的文本

谜题16:行打印程序

如何在 C++ 程序中的 2 个特定字符之间比较 2 个文件中的文本行

c语言编写简易的文本编辑器