用C++输出两个指定时间段内所有的日期,并保存为txt
例如输入1960010119700101然后枚举这两个时间的所有日期,输出txt文档用C++怎么写?...
例如
输入
19600101 19700101
然后枚举这两个时间的所有日期,输出txt文档
用C++怎么写? 展开
输入
19600101 19700101
然后枚举这两个时间的所有日期,输出txt文档
用C++怎么写? 展开
2016-10-23
展开全部
/*程序如果正常结束,桌面上会有一个《测试.txt》文件,可打开检查输入情况*/
#include <iostream>
#include <fstream>
struct date
{
int year; //年;
int month; //月;
int day; //日;
};
void ymd(date &x, const unsigned long long &begin);
bool judge(date &x);
void nextday(date &x);
int main()
{
unsigned long long begin{};
unsigned long long end{};
std::cout << "请输入开始日期和结束日期(空格隔开):";
while(std::cin >> begin >> end) //检查;
{
if(begin > end)
std::cout << "开始日期大于结束日期,请重新输入:";
else
break;
}
date start{};
date over{};
ymd(start, begin);
ymd(over, end);
if(!judge(start) || !judge(over)) //判断日期正确性;
{
std::cout << "不存在该日期,程序结束!\n";
exit(1);
}
std::ofstream file("C:\\Users\\Administrator\\Desktop\\测试.txt"); //放到了桌面上,程序正常结束后,请打开检查;
if(!file.is_open()) //检查文件是否打开;
{
std::cout << "文件打开失败,程序结束!\n";
exit(1);
}
file << begin << '\n';
while(!(start.year == over.year && start.month == over.month && start.day == over.day)) //循环到结束日期;
{
nextday(start);
file << start.year;
if(start.month < 10)
file << '0' << start.month;
else
file << start.month;
if(start.day < 10)
file << '0' << start.day << '\n';
else
file << start.day << '\n';
}
file << end << '\n';
file.close();
return 0;
}
void ymd(date &x, const unsigned long long &begin) //将输入日期对应赋值到结构成员;
{
x.year = begin / 10000;
x.month = (begin - x.year * 10000) / 100;
x.day = (begin - x.year * 10000 - x.month * 100);
}
bool judge(date &x) //判断日期是否存在;
{
bool temp{true};
if(x.month > 12)
temp = false;
else if(x.month == 1 || x.month == 3 || x.month == 5 || x.month == 7 || x.month == 8 || x.month == 10 || x.month == 12)
{
if(x.day > 31)
temp = false;
}
else if(x.month == 2)
{
if(((x.year % 4 == 0 && x.year % 100 != 0)||(x.year % 400 == 0)) && x.day > 29)
temp = false;
else if(x.day > 28)
temp = false;
}
else
{
if(x.day > 30)
temp = false;
}
return temp;
}
void nextday(date &x) //计算下一天的日期;
{
if(x.month == 1 || x.month == 3 || x.month == 5 || x.month == 7 || x.month == 8 || x.month == 10 || x.month == 12)
{
if(x.day == 31)
{
x.day = 1;
++x.month;
}
else
++x.day;
}
else if(x.month == 2)
{
if(x.day == 28)
{
if((x.year % 4 == 0 && x.year % 100 != 0)||(x.year % 400 == 0))
++x.day;
else
{
x.day = 1;
x.month = 3;
}
}
else if(x.day == 29)
{
x.day = 1;
x.month = 3;
}
else
++x.day;
}
else
{
if(x.day == 30)
{
x.day = 1;
++x.month;
}
else
++x.day;
}
if(x.month > 12)
{
x.month = 1;
++x.year;
}
}
展开全部
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <cstdio>
#include <fstream>
using namespace std;
int is_leapyear(int year) //如果润年,返回1,否则返回0
{
if((year&4==0 && year%100!=0) || year%400==0)
{
return 1;
}
else
{
return 0;
}
}
int days_one_month(int year, int month) //返回一个月的天数
{
int leap,re=0;
leap=is_leapyear(year); //是否是润年
switch(month)
{
case 1: //1,3,5,7,8,10,12月每月都是31天
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
re=31;
break;
case 4: //4,6,9,11月每月都是30天
case 6:
case 9:
case 11:
re=30;
break;
case 2:
if(leap==1) //2月判断是否是润年
{
re=29; //是润年,则是29天
}
else
{
re=28; //不是润年,则是28天
}
break;
default:
printf("\nmonth is error!");
break;
}
return re;
}
int main(int argc, char** argv)
{
char date1[10]={"\0"};
char date2[10]={"\0"};
int y1,y2,m1,m2,d1,d2;
cout<<"input first date(ex: 19601001): "<<endl;
cin>>date1;
cout<<"input second date(ex: 19801001): "<<endl;
cin>>date2;
char s[10]={"\0"}; //以下分别把输入的数据转换为数值的
memset(s,'\0',10); //年,月,日,分别存储于y1,m1,d1中
strncpy(s,date1,4);
y1=atoi(s);
memset(s,'\0',10);
s[0]=date1[4];
s[1]=date1[5];
m1=atoi(s);
memset(s,'\0',10);
s[0]=date1[6];
s[1]=date1[7];
d1=atoi(s);
memset(s,'\0',10);
strncpy(s,date2,4);
y2=atoi(s);
memset(s,'\0',10);
s[0]=date2[4];
s[1]=date2[5];
m2=atoi(s);
memset(s,'\0',10);
s[0]=date2[6];
s[1]=date2[7];
d2=atoi(s);
ofstream ofile;
ofile.open("d:\\www.txt); //打开文件以便写入
while(1)
{
int n=0;
n=days_one_month(y1,m1); //n为该月有多少天
if(d1>n) //d1如果大于n天
{ //则月份加1
m1++;
d1=1;
}
if(m1>12) //月份大于12,则年份加1
{
y1++;
m1=1;
}
memset(s,'\0',10);
sprintf(s,"%d%02d%02d",y1,m1,d1);
ofile<<s<<endl;
d1++;
if(y1>=y2 && m1>=m2 && d1>=d2)
{
break;
}
}
ofile.close();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-10-23
展开全部
就是日期加1天, 注意判断大月、小月、闰年
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ctrl+c复制ctrl+v粘贴
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询