务实现,求思路,一个有点类似数据库的查询的功能实现

求实现,求思路,一个有点类似数据库的查询的功能实现
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,转换后才是数字类型。