免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 高峰
打印 上一主题 下一主题

大家在编程过程中有没有自己比较得意的代码,共享一下,我先来我的一个。 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2007-08-18 22:18 |只看该作者
.... 没有在这里发表过吧。

论坛徽章:
0
72 [报告]
发表于 2007-08-18 22:29 |只看该作者

也贴一个判断Ip的

效率不高, 主要看了楼主贴了一个, 手头又有一个一模一样的, 就出来现现眼, 呵呵
bool ip_valid(const char* ip){

    long i = 0;

    long n = 0;

    char buf[4] = {0};

    while(*ip){

        if((*ip) == '.'){

            if(i == 0 || n == 3 || atoi(buf) > 255)

                return false;



            buf[0] = 0;

            buf[1] = 0;

            buf[2] = 0;



            i = 0;

            ++ n;

            ++ ip ;

        }else{

            buf[i ++] = *(ip ++);

        }

        if(i == 4) return false;

    }

    return (n == 3);

}

论坛徽章:
0
73 [报告]
发表于 2007-08-18 22:54 |只看该作者
嘿嘿,
你的程序
对于
"+1.0.0.0"
"a.a.a.a"

都能得到ip合法这个结论吧

[ 本帖最后由 ivhb 于 2007-8-18 22:57 编辑 ]

论坛徽章:
0
74 [报告]
发表于 2007-08-19 01:04 |只看该作者
大多数链表并非只有next指针是堆里的,实际应用中往往还有数据也是在堆里的, 很怀疑上述的意义在哪里

论坛徽章:
0
75 [报告]
发表于 2007-08-20 09:11 |只看该作者
原帖由 isnowran 于 2007-8-19 01:04 发表
大多数链表并非只有next指针是堆里的,实际应用中往往还有数据也是在堆里的, 很怀疑上述的意义在哪里

不懂你是什么意思?

论坛徽章:
0
76 [报告]
发表于 2007-08-20 09:33 |只看该作者
是说你仅仅考虑free链表本身是不够的,一般情况而言,还需要free该链表的数据。
这样,实现通用的free链表本身,只是完成了工作的一半。

论坛徽章:
0
77 [报告]
发表于 2007-08-20 09:46 |只看该作者
原帖由 isnowran 于 2007-8-19 01:04 发表
大多数链表并非只有next指针是堆里的,实际应用中往往还有数据也是在堆里的, 很怀疑上述的意义在哪里


我想他的意思可能有两种.

1 说你的代码只释放了next部分的空间,对于数据所申请的空间并没有释放.比如

   struct p{
        struct p* next;
        char *m;
    };
     这样一来,如果只释放了struct p的空间,那么m所占用的内存将泄漏.

2 是说我的代码,所定义的链表结构只有一个next指针.
    对于这个问题,我想说的是,我定义的那个链表结构是一个基础结构,你可以从我的结构上 派生出你自己的链表结构.这点,我在代码示范中已经写得很清楚了.而且,这种做法是属于合法的,并没有什么不妥.


当然,如果你说链表内分配的内存释放,当然也可以通用的自动释放.代码比较复杂,而且我怕贴出来又有人说怪话.所以还是不贴的好.


上面两个是对于isnowran朋友所发留言意图的合理推理.根据其所发表的内容进行推理,以上两个可能意义符合逻辑率最高.
如果其不是这两个意思的任何一种,那我表示抱歉.因为其逻辑已经超出了正常范畴.系统无法解析.


对于给您造成的问题,我们表示非常抱歉.请及时与信息中心联系.我们将尽快修复这个逻辑性bug.

论坛徽章:
0
78 [报告]
发表于 2007-08-20 10:46 |只看该作者
原帖由 北斗星君 于 2007-8-20 09:46 发表


我想他的意思可能有两种.

1 说你的代码只释放了next部分的空间,对于数据所申请的空间并没有释放.比如

   struct p{
        struct p* next;
        char *m;
    };
     这样一来,如果只释放了 ...


多谢北斗的一一解释。明白了,呵呵。
这种结构的话就很难做到通用的啦。

如果愿意,你的代码贴一下啦,:wink:

论坛徽章:
0
79 [报告]
发表于 2007-08-20 22:47 |只看该作者
呵呵, 本来我的函数就是为了自己软件用的, 还不至于非法输入到  a.a.a.a 的地步, 若觉得不舒服, 就将 atoi 调用换掉, 反正那个 atoi 只是为了简单用的, 如果按位依次判断的话, 恐怕非但没有了这个问题, 效率还有上升呢

#define not_in(x, a, b)  (x < '0' + a && x > '0' + b)
#define error1  (not_in(buf[0], 0, 2))
#define equal  (buf[0] == '2')
#define error2(x) (equal) ? (not_in(x, 0, 5) : not_in(x, 0, 9))

bool ip_valid(const char* ip){
    long i = 0;
    long n = 0;
    char buf[4] = {0};

    while(*ip){
        if((*ip) == '.'){
            if(i == 0 || n == 3 || error1 || error2(buf[1]) || error2(buf[2]))
                return false;

            buf[0] = 0;
            buf[1] = 0;
            buf[2] = 0;

            i = 0;
            ++ n;
            ++ ip ;
        }else{
            buf[i ++] = *(ip ++);
        }
        if(i == 4) return false;
    }
    return (n == 3);
}                             

还有没有问题, 难说还有,呵呵
够用就行了, 没必要非得写的万无一失

论坛徽章:
0
80 [报告]
发表于 2007-08-20 22:51 |只看该作者
其实标准 inet_addr 实验过没, 我记得曾经在 windows 上做过实验 inet_addr("192"), 和调用
inet_addr("192.0.0.0")一模一样, 如果记得没错的话就是这样.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP