务实现,求思路,一个有点类似数据库的查询的功能实现
求实现,求思路,一个有点类似数据库的查询的功能实现
11|192.168.1.1|192.168.0.4|egrteavsdfs|
12|192.168.1.1|192.168.0.4|abcd2221111|
13|192.168.0.0|egrteavsdfs|abcd1111112|
14|192.168.0.2|abcdwgwsefg|...........|
15|192.168.0.3|abcdsafrtgt|...........|
16|192.168.0.4|abcdsadfasf|...........|
17|192.168.1.1|...........|192.168.0.3|
18|192.168.1.1|192.168.0.4|...........|
19|...........|192.168.0.4|192.168.0.3|
20|...........|192.168.1.1|egrteavsdfs|
表如上图所示。
例如: 表中的12则对应它后头的 |192.168.1.1|192.168.0.4|abcd2221111| 这3个值
如果选择输入值是 192.168.1.104 , 则输出key : 11 , 12, 16, 18 , 19
输入值是 192.168.1.1, 则输出key: 11, 12, 17 , 18 , 20
怎么实现?
------解决方案--------------------
11|192.168.1.1|192.168.0.4|egrteavsdfs|
12|192.168.1.1|192.168.0.4|abcd2221111|
13|192.168.0.0|egrteavsdfs|abcd1111112|
14|192.168.0.2|abcdwgwsefg|...........|
15|192.168.0.3|abcdsafrtgt|...........|
16|192.168.0.4|abcdsadfasf|...........|
17|192.168.1.1|...........|192.168.0.3|
18|192.168.1.1|192.168.0.4|...........|
19|...........|192.168.0.4|192.168.0.3|
20|...........|192.168.1.1|egrteavsdfs|
表如上图所示。
例如: 表中的12则对应它后头的 |192.168.1.1|192.168.0.4|abcd2221111| 这3个值
如果选择输入值是 192.168.1.104 , 则输出key : 11 , 12, 16, 18 , 19
输入值是 192.168.1.1, 则输出key: 11, 12, 17 , 18 , 20
怎么实现?
------解决方案--------------------
- C/C++ code
//11|192.168.1.1|192.168.0.4|egrteavsdfs| //12|192.168.1.1|192.168.0.4|abcd2221111| //13|192.168.0.0|egrteavsdfs|abcd1111112| //14|192.168.0.2|abcdwgwsefg|...........| //15|192.168.0.3|abcdsafrtgt|...........| //16|192.168.0.4|abcdsadfasf|...........| //17|192.168.1.1|...........|192.168.0.3| //18|192.168.1.1|192.168.0.4|...........| //19|...........|192.168.0.4|192.168.0.3| //20|...........|192.168.1.1|egrteavsdfs| // //表table.txt如上图所示。 // //例如: 表中的12则对应它后头的 |192.168.1.1|192.168.0.4|abcd2221111| 这3个值 // //如果选择输入值是 192.168.0.4 , 则输出key : 11 , 12, 16, 18 , 19 // 输入值是 192.168.1.1, 则输出key: 11, 12, 17 , 18 , 20 // #include <stdio.h> #include <string.h> #define MAXCHARS 100 #define MAXLINES 100000 char s[MAXLINES][MAXCHARS]; char ip[20]; int i,n; FILE *f; int main() { f=fopen("table.txt","r"); if (NULL==f) { printf("Can not open file table.txt!\n"); return 1; } i=0; while (1) { if (NULL==fgets(s[i],MAXCHARS,f)) break; if ('\n'!=s[i][strlen(s[i])-1]) { printf("line %d of table.txt too long!(>%d characters)",i+1,MAXCHARS-1); fclose(f); return 2; } i++; if (i>=MAXLINES) { printf("Warning:>line %d ignored!\n",MAXLINES); break; } if (0==(i%1000)) printf("%d lines imported from file table.txt\n",i); } fclose(f); printf("Total %d lines imported from file table.txt\n",i); n=i; while (1) { printf("Input IP:"); fflush(stdout); ip[0]='|'; fgets(ip+1,19,stdin); if (strlen(ip)<9) break; if ('\n'==ip[strlen(ip)-1]) ip[strlen(ip)-1]=0; strcat(ip,"|"); for (i=0;i<n;i++) { if (strstr(s[i],ip)) printf("%.2s,",s[i]); } printf("\n"); } return 0; } //Input IP:192.168.0.4 //11,12,16,18,19, //Input IP:192.168.1.1 //11,12,17,18,20, //Input IP:
------解决方案--------------------
数字定不定长无所谓啊,文件里取出的都是buf,转换后才是数字类型。