| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1184 人关注过本帖
标题:请问谁有办法优化一下
只看楼主 加入收藏
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 19楼 TonyDeng
我试试
2012-01-19 20:54
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 20楼 a249426519
我觉得你就没看明白他的话的意思。你们俩目前就不在一个境界里面。另外你有点矫情我觉得。
2012-01-19 23:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 22楼 share32
呵呵,算了,他还没入门,这种争论的结果只会是一场口水仗。

直接来段楼主想要的代码。这种代码琐碎也没什么技术含量,本来懒得写,但不写好像我不会似的。
程序代码:
#include<stdio.h>
#include<time.h>
#include<ctype.h>

#define YEAR_MAX    10000000

int isLeap(int year)
{
    return !(year % 4) && year % 100 || !(year % 400);
}

int days(int year, int month, int day)
{
    const int predays[] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
    return predays[month] + day + (month > 2 ? isLeap(year) : 0);
}

int formatDate(char *str, int *year, int *month, int *day)
{
    const int md[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    char *p;
    for(p = str; isdigit(*p) || *p == '-' && p != str && p[1] && p[1] != '-'; p++);
    if(*p && *p != '\n') return 0;
    *p = 0;
    for(*year = 0; isdigit(*str) && *year <= YEAR_MAX; *year = *year * 10 + *(str++) - '0');
    if(*year == 0 || *year > YEAR_MAX || !*(str++)) return 1;
    for(*month = 0; isdigit(*str) && *month <= 12; *month = *month * 10 + *(str++) - '0');
    if(*month == 0 || *month > 12 || !*(str++)) return 1;
    for(*day = 0; isdigit(*str) && *day <= 31; *day = *day * 10 + *(str++) - '0');
    if(*day == 0 || *day > md[*month] + ((*month == 2) ? isLeap(*year) : 0)) return 1;
    return 2;
}

int main()
{
    int year, month, day;
    char str[32];
    struct tm * date;
    time_t now;
    time(&now);
    date = localtime(&now);
    printf("输入待计算日期(格式为%d-%d-%d): ", date->tm_year + 1900, date->tm_mon + 1, date->tm_mday);
    fgets(str, 128, stdin);
    switch(formatDate(str, &year, &month, &day))
    {
        case 0: printf("\n输入格式错误\n"); break;
        case 1: printf("\n无效日期\n"); break;
        case 2: printf("\n%d-%d-%d为%d年第%d天\n", year, month, day, year, days(year, month, day));
    }
    return 0;
}

重剑无锋,大巧不工
2012-01-20 00:58
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 23楼 beyondyf
楼主,我没有什么冒犯你的意思,只是我刚刚入门,很多东西都不懂,有什么冒犯在这里向你道歉,我也知道楼主很厉害,你写的我看不懂,但是运行是可以的,谢谢
2012-01-20 02:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
自己做吧,要自己努力才有收穫的。嘗試過了,碰過了釘子,然後再給你講解,就有收穫得多,一開始就看別人的代碼,沒用的。我鼓勵和支持你自己嘗試。

授人以渔,不授人以鱼。
2012-01-20 02:48
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 25楼 TonyDeng
上面的程序就是我自己做的,我想看看有没有新的灵感来改进而已。。。。
2012-01-20 03:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我說改進的工作也是你自己做,前面我給了你提示,你說嘗試的。

授人以渔,不授人以鱼。
2012-01-20 03:24
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 27楼 TonyDeng
是的,还在试,嘻嘻,看看有木有更简单的
2012-01-20 05:32
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 24楼 a249426519
冒犯谈不上,只是有些遗憾。你这孩子确实挺犟的。可以明确的告诉你,计算上更简单的没有了(如果你觉得找到了,请告诉我一声),形式上更简单的是正则表达式。

我的代码也确实没什么高深的地方,看不懂只因为你的水平还不够(因为你学习时间尚短,没有贬低的意思)。正因如此,建议你不要再在这个地方纠结浪费时间了,还是好好把基础知识学牢固了,欲速则不达。

顺便送一个判断和提取日期的正则表达式 ^(\d+)[-/. ](\d+)[-/. ](\d+)$

重剑无锋,大巧不工
2012-01-20 09:34
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 29楼 beyondyf
好的,我会好好打好基础的,谢谢
2012-01-20 17:41
快速回复:请问谁有办法优化一下
数据加载中...
 
   



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

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