C和指针 课后题 1.4

编写一个程序,一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行,假定每行不超过1000

 

C和指针 课后题 1.4
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main()
 6 {
 7     char s[10][1000];
 8     int strlens[10];
 9     int i,j,k,max,b=0;
10 
11     scanf("%d ",&i);
12 
13     for(j=0;j<i;j++){
14         gets(s[j]);
15         strlens[j] = strlen(s[j]);
16         printf("第%d行长度为%d\n",j+1,strlens[j]);
17     }
18     max = strlens[0];
19     for(k = 1;k<i;k++){
20         if(strlens[k] > max)
21         b = k;
22 
23         max = strlens[k];
24     }
25     printf("最长的一行为第%d行",b+1);
26     puts(s[b]);
27 }
C和指针 课后题 1.4

这是我的想法,就是用二维数组来存储,但这个相应产生了两个问题

1.必须手动输入有多少行。

2.输入行数有限制。

然后翻阅了答案,茅塞顿开的感觉

 

C和指针 课后题 1.4
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main()
 6 {
 7     char input[1001];
 8     int longest_len=-1;
 9     char longest[1001];
10     int len;
11 
12     while((gets(input)) != NULL){ /*这种形式一直用的不太好*/
13         
14         len = strlen(input);
15 
16         if(len > longest_len){
17             longest_len = len;
18             strcpy(longest,input);/*注意这些C自带函数的运用,有些时候简化很多问题*/
19         }
20     }
21 
22         if(longest_len > 0)
23             puts(longest);
24     
25 }
C和指针 课后题 1.4

 

作者很巧妙的避开了到底有多少行,他并没有直接存储,而是每次都把最长的拿出来。很好。

C和指针 课后题 1.4

上一篇:TortoiseSVN使用教程


下一篇:【C#小知识】C#中一些易混淆概念总结