读入一组文本行,打印最长的文本行
???? 源自《The C Programming Language》P20 ex1.9:
???? 從終端讀入一組文本行,并將最長的文本行打印出來
???? 代碼:
?
main.c 1 #include <stdio.h>2
3 #define MAXLINE 1000 //允許輸入行的最大長度
4 #define LIM 8
5
6 int getline(char line[], int maxline);
7 void copy(char to[], char from[]);
8
9 int main()
10 {
11
12 int i, j;
13 int len; //當前行長度
14 int maxnum; //目前為止發現的最長行的長度
15 char line[MAXLINE]; //當前輸入行
16 char longest[MAXLINE][MAXLINE]; //用于保存最長的行
17
18 i = j = 0;
19 maxnum = 0;
20 /*while((len = getline(line, MAXLINE)) > 0)
21 if(maxnum < len)
22 {
23 maxnum = len;
24 copy(longest, line);
25 }
26 if(maxnum > 0)
27 printf("%s",longest);*/
28 while((len = getline(line, MAXLINE)) > 0)
29 if(len > LIM)
30 copy(longest[i++], line);
31 --i;
32 while(j <= i)
33 printf("%s", longest[j++]);
34
35 return 0;
36 }
37
38 int getline(char s[], int lim)
39 {
40 int c, i;
41
42 for(i = 0; i<lim-1 && (c = getchar())!=EOF && c!='\n'; ++i)
43 s[i] = c;
44 if(c == '\n')
45 {
46 s[i] = c;
47 ++i;
48 }
49 s[i] = '\0';
50
51 return i;
52 }
53
54 void copy(char to[], char from[])
55 {
56 int i;
57
58 i = 0;
59 while((to[i] = from[i]) != '\0')
60 ++i;
61 }
?
???? 分析:
???? 1,? 需要兩個數據結構:line,longest保存當前輸入行,長度最長的行,line longest均為指向大小為MAXLINE的char數組。
???? 2,? getline函數:將一行讀入到line中,返回其長度。
????????? (a):for循環的判斷條件,i < lim-1 && (c = getchar()) != EOF && c != '/n',當滿足這些條件時,將從終端中的讀入
???????????????? 字符放進s數組(即實參line數組)中。
????????? (b):Q:為什么不是i <= lim-1呢? A:字符串的結尾符必須是'/0',如果設置為i <= lim-1,在本例中則為i <= 999,
????????????????? 如果一個字符串剛好是1000個字符,當讀入第1000個字符時,并且該字符不是'/n',也沒到達文件尾,則符合for
????????????????? 循環的判斷條件,執行s[i] = c;,此時字符數組s(相對應實參line)放滿了,當跳出循環執行s[i] = '/0';時,因為
????????????????? 空間不夠,產生了越界錯誤。
??????????(c):當讀入'/n'時,意味著從輸入中讀入一行字符這個操作即將完成,此時需要做的就是將該'/n'和'/0'放入s[i]中。
????????? (d):當讀入的字符為EOF,意味到達文件尾,輸入中已經沒有字符可供讀入了,故再將/0'讀入到s中,以形成一個字符串,
???????????????? 這個字符串被存儲在字符數組s中。
????? 3,? copy函數中while判斷條件:(to[i] = from[i]) != '/0' 精干簡潔。
轉載于:https://www.cnblogs.com/roma823/archive/2011/04/20/2101246.html
總結
以上是生活随笔為你收集整理的读入一组文本行,打印最长的文本行的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 【转摘留用】页面静态化..
 - 下一篇: 百度是如何收录没有提交过的新站