编写一个程序,一行行的读取输入行,直到文件尾. 算出每行长度,然后打印最长行,假定每行不超过1000
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 }
这是我的想法,就是用二维数组来存储,但这个相应产生了两个问题
1.必须手动输入有多少行。
2.输入行数有限制。
然后翻阅了答案,茅塞顿开的感觉
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 }
作者很巧妙的避开了到底有多少行,他并没有直接存储,而是每次都把最长的拿出来。很好。