| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:字符串文本读写操作,去掉重复3段IP
只看楼主 加入收藏
duangexin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-4-12
收藏
 问题点数:0 回复次数:11 
字符串文本读写操作,去掉重复3段IP
手动输入IP字符串,比如输入14.16.92.16
比对IP文本库中,如果前三段即14.16.92与库中的任意一个IP的前三相同,
则提示该IP重复。(也即IP后面2段必须变化2段)不增加到IP文本库中,如果没有相同的,则把当期IP追加到文本库中。

文本库中数据
14.16.215.211
14.30.0.22
14.16.213.172      
14.25.1.23
14.30.22.62
14.16.92.17
14.25.101.213
14.16.96.231
14.30.2.31
14.16.216.122
14.16.218.234   
14.30.32.76
14.16.141.52      
14.30.35.78
14.16.139.60

手动输入IP字符串,比如输入14.16.92.16 根据判断重复的思路,此时应该判断成为IP重复。
如果输入14.16.200.100,则该IP有效,追加到数据库文本中。
更多 0
搜索更多相关主题的帖子: 字符串 
2015-04-06 23:24
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

这样多简单 不用编程序受累的

Only the Code Tells the Truth             K.I.S.S
2015-04-06 23:55
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
(^\d{1,3}\.)(\d{1,3}\.)(\d{1,3}\.)(.*$)
=
\1\2\30

Only the Code Tells the Truth             K.I.S.S
2015-04-06 23:55
zhou78yang
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:18
专家分:100
注 册:2014-3-18
收藏
得分:0 
可以用个二维数组或者结构体来存储数据,再写个遍历第三个数值的函数应该就差不多了,如果第四位也不允许有相同的就再写个校验第四位的函数
2015-04-06 23:58
duangexin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-4-12
收藏
得分:0 
回复 2楼 longwu9t
首先非常感谢,但是这个我是要用代码来解决的
因为这个只是程序中的第一步,麻烦老师再次指导一下!
2015-04-07 09:33
duangexin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-4-12
收藏
得分:0 
回复 4楼 zhou78yang
第4段IP不管 只要前3段一样就提示IP重复
2015-04-07 09:36
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void eat_word(void);
void eat_line(FILE *fp);
void read_line(FILE *fp, char *p);
int cmp(int rows, char ip[][12], char *new);
void wrt_line(FILE *fp, char *p);

int main(int argc, char **argv) {
    char (*ip)[12], new[16] = {0}, t[4][4];
    FILE *fp;
    int i, c, rows = 0;

    if(argc != 2) return 1;

    fp = fopen(argv[1], "r");

    if(!fp) return 1;

    while(!feof(fp))
        while((c = getc(fp)) != EOF) if(c == '\n') rows++;

    if(!(ip = malloc(rows * sizeof(ip[12])))) return 1;

    rewind(fp);

    for(i = 0; i < rows; i++) {
        memset(ip[i], 0, sizeof(ip[i]));
        read_line(fp, ip[i]);
    }

    fclose(fp);

    if(!(fp = fopen(argv[1], "a"))) return 1;

    do {
        puts("input ip:");

        for(i = 0; i < 4; i++) {
            memset(t[i], 0, sizeof(t[i]));
            scanf("%[0-9]", t[i]);
            eat_word();
        }

        for(i = 0; i < 2; i++)  strcat(t[i], ".");

        for(i = 0; i < 3; i++)  strcat(new, t[i]);

        if(cmp(rows, ip, new)) {
            strcat(new, ".");
            strcat(new, t[3]);
            wrt_line(fp, new);

        } else puts("already in data");

        puts("continue? (Y / N)");
        c = getchar();
        eat_word();
    } while(c == 'Y' || c == 'y');

    free(ip);
    fclose(fp);
    return 0;
}

void eat_word(void) {
    int c;

    while((c = getchar()) != '.' && c != '\n') continue;
}

void eat_line(FILE *fp) {
    int c;

    while((c = getc(fp)) != '\n' && c != EOF) continue;
}

void read_line(FILE *fp, char *p) {
    int i;
    char t[3][4];

    for(i = 0; i < 3; i++) {
        memset(t[i], 0, sizeof(t[i]));
        fscanf(fp, "%[0-9]", t[i]);
        getc(fp);
    }

    for(i = 0; i < 2; i++)  strcat(t[i], ".");

    for(i = 0; i < 3; i++)  strcat(p, t[i]);

    eat_line(fp);
}

int cmp(int rows, char ip[][12], char *new) {
    int flag = 1;

    while(--rows >= 0) {
        if(strcmp(ip[rows], new) == 0) {
            flag = 0;
            break;
        }
    }

    return flag;
}

void wrt_line(FILE *fp, char *p) {
    fprintf(fp, "%s\n", p);
}

Only the Code Tells the Truth             K.I.S.S
2015-04-07 10:24
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

Only the Code Tells the Truth             K.I.S.S
2015-04-07 10:25
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
这个程序我写的还有个漏洞
就是没有把新增ip加入到ip数组中
待我再修改

Only the Code Tells the Truth             K.I.S.S
2015-04-07 10:52
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
/* ip数据文件可以不存在 不存在时 执行程序会按参数建立新文件 ip.exe newdata.txt */
/* 如果文件存在 要求每行一ip 行首尾不能有多余空格 不能空行 EOF之前要有换行 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void eat_word(void);
void eat_line(FILE *fp);
void read_line(FILE *fp, char *p);
int cmp(int rows, char *ip[rows], char *new);

int main(int argc, char **argv) {
    char **ip, new[16] = "0.0.0.0", t[4][4];
    FILE *fp;
    int i, c, rows = 0;

    if(argc != 2) return 1;

    if(!(fp = fopen(argv[1], "r"))) {
        if((fp = fopen(argv[1], "w+"))) fprintf(fp, "%s\n", new);
        else return 1;
    }

    rewind(fp);

    while(!feof(fp))
        while((c = getc(fp)) != EOF) if(c == '\n') rows++;
    printf("%d\n", rows);

    if(!(ip = malloc(rows * sizeof(char*)))) return 1;

    for(i = 0; i < rows; i++) if(!(ip[i] = malloc(12 * sizeof(char)))) return 1;

    rewind(fp);

    for(i = 0; i < rows; i++) {
        memset(ip[i], 0, 12 * sizeof(char));
        read_line(fp, ip[i]);
    }

    fclose(fp);

    if(!(fp = fopen(argv[1], "a"))) return 1;

    do {
        puts("input ip:");

        memset(t, 0, 16 * sizeof(char));
        memset(new, 0, 16 * sizeof(char));
        for(i = 0; i < 4; i++) {
            scanf("%[0-9]", t[i]);
            eat_word();
        }

        for(i = 0; i < 2; i++)  strcat(t[i], ".");

        for(i = 0; i < 3; i++)  strcat(new, t[i]);

        if(cmp(rows, ip, new)) {
            rows++;

            if(!(ip = (realloc(ip, rows * sizeof(char*))))) return 1;

            if(!(ip[rows - 1] = malloc(12 * sizeof(char)))) return 1;

            strcpy(ip[rows - 1], new);

            strcat(new, ".");
            strcat(new, t[3]);
            fprintf(fp, "%s\n", new);

        } else puts("already in data");

        puts("continue? (Y / N)");
        c = getchar();
        eat_word();
    } while(c == 'Y' || c == 'y');

    for(i = 0; i < rows; i++) free(ip[i]);

    free(ip);
    fclose(fp);
    return 0;
}

void eat_word(void) {
    int c;

    while((c = getchar()) != '.' && c != '\n') continue;
}

void eat_line(FILE *fp) {
    int c;

    while((c = getc(fp)) != '\n' && c != EOF) continue;
}

void read_line(FILE *fp, char *p) {
    int i;
    char t[3][4];

    for(i = 0; i < 3; i++) {
        fscanf(fp, "%[0-9]", t[i]);
        getc(fp);
    }

    for(i = 0; i < 2; i++)  strcat(t[i], ".");

    for(i = 0; i < 3; i++)  strcat(p, t[i]);

    eat_line(fp);
}

int cmp(int rows, char *ip[rows], char *new) {
    int flag = 1;

    while(--rows >= 0) {
        if(strcmp(ip[rows], new) == 0) {
            flag = 0;
            break;
        }
    }

    return flag;
}

Only the Code Tells the Truth             K.I.S.S
2015-04-07 13:13
快速回复:字符串文本读写操作,去掉重复3段IP
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027654 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved