- 写一个C语言程序实现以下功能:将扫描结果APlist.txt中的AP信息重新按照第5列信号强度进行降序排序,信号强度相同的按照第1列频道Ch降序排序,信号强度和频道相同的按照第二列降序排序。 并将排序后的结果输出到一个新的文件中。
- 要求:除了基础库基本字符串处理函数和文件操作的函数,不要使用诸如qsort等其他库函数。
- 源文件名:APlist.txt,目标文件名:Dest.txt
文件内容APlist.txt
1 cosy city hotel 20:93:4d:7b:7f:87 NONE 100 11b/g/n ABOVE In NO
1 FWR9202-0C9948 00:21:f2:0c:99:48 WPAPSK/AES 100 11b/g/n NONE In NO
1 qingtongsuliaoshuiping 00:21:f2:ce:a1:00 WPAPSK/AES 100 11b/g/n ABOVE In NO
1 Wireless_AP0C48E8 00:21:f2:0c:48:e8 WPA2PSK/AES 100 11b/g/n ABOVE In NO
1 DRI_Router100 00:21:f2:2a:b8:8c WPA1PSKWPA2PSK/AES 100 11b/g/n NONE In NO
1 zjst c8:3a:35:4c:27:e4 WPAPSK/AES 89 11b/g/n ABOVE In NO
1 Wireless_1FXS_1 00:01:9f:3a:00:38 NONE 100 11b/g/n ABOVE In NO
1 Wireless_1FXS_2 02:01:9f:1a:00:38 NONE 100 11b/g/n ABOVE In NO
1 Wireless_1FXS_3 02:01:9f:2a:00:38 NONE 100 11b/g/n ABOVE In NO
1 Wireless_AP000000 22:33:55:88:89:66 NONE 100 11b/g/n ABOVE In NO
1 FIP11W-000008 00:0c:fe:00:00:08 WPA2PSK/AES 100 11b/g/n ABOVE In NO
1 Wireless_AP000003 22:33:55:b8:89:66 NONE 100 11b/g/n ABOVE In NO
6 evergreen 88:25:93:5d:d4:e7 WPA1PSKWPA2PSK/AES 100 11b/g/n NONE In NO
6 CAMBIUM_2.4GHz_0C97F4 00:21:f2:0c:97:f4 WPA2PSK/AES 100 11b/g/n ABOVE In NO
6 LXCT 30:b4:9e:62:52:8e WPA1PSKWPA2PSK/TKIPAES 73 11b/g/n BELOW In NO
6 G801TEST 00:21:f2:10:b9:54 NONE 100 11b/g/n ABOVE In NO
7 VW21010CC24 00:21:f2:10:cc:24 WPA1PSKWPA2PSK/TKIPAES 100 11b/g/n BELOW In NO
10 Hi-WiFibg 00:21:f2:04:37:fc WEP 100 11b/g/n NONE In NO
10 IP542N_176 00:21:f2:04:37:fd WPA2PSK/TKIPAES 100 11b/g/n NONE In NO
10 00:21:f2:04:37:fe WPA1PSKWPA2PSK/TKIPAES 100 11b/g/n NONE In NO
10 00:21:f2:04:37:ff WEP 100 11b/g/n NONE In NO
10 SFP300-38F744 60:03:47:38:f7:44 WPAPSK/AES 99 11b/g/n BELOW In NO
11 FLYINGVOICE-WORKS 00:21:f2:09:3b:69 WPA2PSK/AES 81 11b/g/n NONE In NO
11 SFP300-0E66F0 00:21:f2:0e:66:f0 WPAPSK/AES 100 11b/g/n BELOW In NO
11 d8:5d:4c:2f:eb:52 NONE 100 11b/g/n BELOW In YES
11 G801-0EC958 00:21:f2:0e:c9:58 NONE 100 11b/g/n BELOW In NO
11 Wireless_AP325244 00:21:f2:11:33:67 WPAPSK/AES 89 11b/g/n BELOW In NO
12 MSG1200_12ACC8 00:21:f2:12:ac:c8 WPA2PSK/TKIPAES 70 11b/g/n BELOW In NO
12 00:21:f2:12:ac:c9 WPA2PSK/TKIPAES 70 11b/g/n BELOW In NO
13 00:21:f2:0d:6c:e0 WPA1PSKWPA2PSK/AES 100 11b/g/n NONE In NO
13 91020D6CE0 00:21:f2:0d:6c:e1 WPA1PSKWPA2PSK/AES 100 11b/g/n NONE In NO
14 FV_509_INTERNET 00:21:f2:33:00:28 WPAPSK/AES 100 11b/g/n NONE In NO
14 00:21:f2:0d:6c:d8 WPA1PSKWPA2PSK/AES 100 11b/g/n NONE In NO
14 91020D6CD8 00:21:f2:0d:6c:d9 WPA1PSKWPA2PSK/AES 100 11b/g/n NONE In NO
main.c文件
#include "main.h"
int main()
{
FILE* fd_src = NULL;
FILE* fd_dest = NULL;
int lineSum = LINENUM;
fd_src = fopen("APlist.txt", "r");
if (fd_src == NULL) goto EXIT;
fd_dest = fopen("Dest.txt", "w+");
if (fd_dest == NULL) goto EXIT;
LineData* (*ApData)[LINENUM] = malloc(sizeof(LineData)*LINENUM);
if(ApData == NULL)
{
printf("---%d---",__LINE__);
perror("error: Open up space error");
goto EXIT;
}
for(int i = 0;i < LINENUM;i++)
{
(*ApData)[i] = NULL;
}
int Sum = ReadFile(&ApData, fd_src,&lineSum);
InsertSort(ApData,Sum);
for(int i = 0;i<Sum;i++)
{
fputs((*ApData)[i]->one,fd_dest);
fputs((*ApData)[i]->two,fd_dest);
fputs((*ApData)[i]->three,fd_dest);
fputs((*ApData)[i]->four,fd_dest);
fputs((*ApData)[i]->five,fd_dest);
fputs((*ApData)[i]->six,fd_dest);
fputs((*ApData)[i]->seven,fd_dest);
fputs((*ApData)[i]->eight,fd_dest);
fputs((*ApData)[i]->nine,fd_dest);
fputc('\n',fd_dest);
}
EXIT:
if(fd_src != NULL)
{
fclose(fd_src);
fd_src = NULL;
}
if(fd_dest != NULL)
{
fclose(fd_dest);
fd_dest = NULL;
}
free(ApData);
ApData = NULL;
return 0;
}
int ReadFile(LineData* (**ret)[],FILE* fd_src,int* lineSum)
{
char str[LINESTRNUM];
memset(str,'\0',sizeof(str));
int Sum = 0;
while(NULL != fgets(str,LINESTRNUM,fd_src))
{
if(Sum == *lineSum)
{
int i = *lineSum;
*lineSum += FIRSTLINEADD;
LineData* (*ApDataTemp)[(*lineSum)] = malloc(sizeof(LineData*)*(*lineSum));
if(ApDataTemp == NULL)
{
printf("---%d---",__LINE__);
perror("error: Open up space error");
goto EXIT;
}
for(int i = 0;i < LINENUM;i++)
{
(*ApDataTemp)[i] = NULL;
}
for(int i = 0;i<Sum;i++)
{
(*ApDataTemp)[i] = (**ret)[i];
}
free(*ret);
*ret = ApDataTemp;
}
LineData* tempData = malloc(sizeof(LineData));
(**ret)[Sum] = tempData;
StrCut(tempData,str);
tempData = NULL;
Sum++;
}
EXIT:
return Sum;
}
void ForCut(char* retList,char* str, int circulationNum,int* start)
{
int i = 0;
for(i = 0;i<circulationNum;i++)
{
retList[i] = str[*start];
(*start)++;
}
retList[i] = '\0';
}
void StrCut(LineData* ret,char* str)
{
int start = 0;
int i = 0;
char NumChange[20] = {'\0'};
ForCut(ret->one,str,ONELIST,&start);
ForCut(ret->two,str,TWOLIST,&start);
ForCut(ret->three,str,THREELIST,&start);
ForCut(ret->four,str,FOURLIST,&start);
ForCut(ret->five,str,FIVELIST,&start);
ForCut(ret->six,str,SIXLIST,&start);
ForCut(ret->seven,str,SEVENLIST,&start);
ForCut(ret->eight,str,EIGHTLIST,&start);
ForCut(ret->nine,str,NINELIST,&start);
return;
}
void InsertSort(LineData* (*ret)[],int Sum)
{
int i = 0;
int start = 1;
while(start < Sum)
{
for(i = 0;i<start;i++)
{
if(Compare(ret,i,start))
{
break;
}
}
start++;
}
return;
}
int Compare(LineData* (*ret)[], int i, int j)
{
int numi = atoi((*ret)[i]->five);
int numj = atoi((*ret)[j]->five);
int flag = 0;
if(numi > numj)
{
insert(ret,i,j);
flag = 1;
}
else if(numi == numj)
{
numi = atoi((*ret)[i]->one);
numj = atoi((*ret)[j]->one);
if(numi > numj)
{
insert(ret,i,j);
flag = 1;
}
else if(numi == numj)
{
int two_cmp = strcmp((*ret)[i]->two,(*ret)[j]->two);
if(two_cmp > 0)
{
insert(ret,i,j);
flag = 1;
}
}
}
return flag;
}
void insert(LineData* (*ret)[], int i, int j)
{
LineData* temporary = (*ret)[j];
while(j > i)
{
(*ret)[j] = (*ret)[j-1];
j--;
}
if(j == i)
{
(*ret)[i] = temporary;
}
return;
}
mian.h文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LINENUM 30
#define LINESTRNUM 256
#define ONELIST 4
#define TWOLIST 33
#define THREELIST 20
#define FOURLIST 23
#define FIVELIST 9
#define SIXLIST 8
#define SEVENLIST 7
#define EIGHTLIST 4
#define NINELIST 4
#define FIRSTLINEADD 10
typedef struct
{
char one[8] ;
char two[64] ;
char three[32] ;
char four[32] ;
char five[16] ;
char six[16] ;
char seven[8] ;
char eight[8] ;
char nine[8] ;
}LineData;
int ReadFile(LineData* (**ret)[],FILE* fd_src,int* lineSum);
void StrCut(LineData* ret,char* str);
void InsertSort(LineData* (*ret)[],int Sum);
int Compare(LineData* (*ret)[], int i, int j);
void insert(LineData* (*ret)[], int i, int j);
Makefile文件
test:
gcc main.c -o test
clean:
rm -rf test