日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读入一组文本行,打印最长的文本行

發布時間:2024/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读入一组文本行,打印最长的文本行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

???? 源自《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

總結

以上是生活随笔為你收集整理的读入一组文本行,打印最长的文本行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。