70,023
社区成员




#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLEN 2048
#define LINENUM 10
struct _Line{
int num; /*序号*/
int len; /*长度*/
char *str; /*字符串*/
};
int main(int argc, char **argv){
char buff[MAXLEN];
struct _Line line[LINENUM];
int num = 0; /*读入行序列号*/
int minlen = 0; /*当前缓冲区最短行长度*/
int minnum; /*当前缓冲区最短行序号*/
int i;
/*读入文件*/
FILE *in;
if ( (in = fopen("in.txt", "r")) == NULL){
perror("fopen");
exit(1);
}
while(fgets(buff, MAXLEN, in) != NULL){
/*当输入行小于10行的情况*/
if(num < LINENUM){
line[num].num = num;
line[num].len = strlen(buff);
line[num].str = (char *)malloc(MAXLEN * sizeof(char));
strncpy(line[num].str, buff, strlen(buff) + 1);
line[num].str[strlen(buff) - 1] = '\0';
}else{
/*找出当前缓冲区最短行*/
minlen = line[0].len;
minnum = 0;
for (i = 0; i < LINENUM; i++){
if(line[i].len < minlen){
minlen = line[i].len;
minnum = line[i].num;
}
}
/*根据最短行的行号替换*/
if (strlen(buff) > minlen ){
strncpy(line[minnum].str, buff, strlen(buff) + 1);
line[minnum].str[strlen(buff) - 1] = '\0';
line[minnum].len = strlen(buff);
line[minnum].num = num;
}
}
num++;
}
/*输出*/
printf("Top 10 lines:\n");
for(i = 0; i < (LINENUM > num ? num: LINENUM); i++){
printf("No.%2d Length:%3d:%s\n", line[i].num, line[i].len, line[i].str);
free(line[i].str);
}
return 0;
}
for (i = 0; i < LINENUM; i++){
if(line[i].len < minlen){
minlen = line[i].len;
minnum = i;//改这里
}
}