程序设计,C++
定义一个时间结构体变量(包括小时,分,秒)。编写几个函数分别实现以下功能:(1)加法运算:时间结构体变量加秒数,返回新的时间结构体变量;
(2)减法运算:两个时间结构体变量相减,返回其相隔的秒数;
(3)减法运算:时间结构体变量减秒数,返回新的时间结构体变量
答案:#include <stdio.h>
struct Time
{
int mHour;
int mMinute;
int mSecond;
};int iHour=0;
int iMinute=0;
int iSecond=0;void GetDistance(int Sec);
Time AddSec(Time &t0,int sec);//加法运算+秒
Time IncSec(Time &t0,int sec);//减法运算-秒
int IncTime(const Time &t1,const Time &t2);//两个时间结构体相减,返回秒数。
void main()
{
///////////////定义两个时间结构体变量//////////////////
Time tm1;
tm1.mHour=5;
tm1.mMinute=35;
tm1.mSecond=46;Time tm2;
tm2.mHour=3;
tm2.mMinute=49;
tm2.mSecond=23;
///////////////////////////////////////////////////////
int sec=IncTime(tm1,tm2);
printf("%d\n",sec);//输出两个时间结构体的差值(秒)
}
void GetDistance(int Sec)
{
iHour=0;
iMinute=0;
iSecond=0;
int temp=Sec;
iHour=temp/3600;
temp%=3600;
iMinute=temp/60;
iSecond=temp%60;
}
Time AddSec(Time &t0,int sec)
{
GetDistance(sec);
t0.mHour+=iHour;
t0.mMinute+=iMinute;
t0.mSecond+=iSecond;
return t0;
}
Time IncSec(Time &t0,int sec)
{
GetDistance(sec);
t0.mHour-=iHour;
t0.mMinute-=iMinute;
t0.mSecond-=iSecond;return t0;
}
int IncTime(const Time &t1,const Time &t2)
{
return (t1.mHour-t2.mHour)*3600+(t1.mMinute-t2.mMinute)*60+(t1.mSecond-t2.mSecond);
}VC6.0下编译通过。
很早之前写过一个时间求间隔和时间加减运算的函数,但是是年月日小时分秒的,稍微改了一下,贴出来希望对你有所帮助:
#include <stdlib.h>
#include <time.h>
static long SubTimeMinus(char *cBeginTime,char *cEndTime,long *iSecond);//求时间差
static long SubTimeAdd(char *cNewTime,char *cOldTime,int iSecond);//时间加减运算 iSecond小于0时为减typedef struct time_struct{
char Year[5];
char Month[3];
char Day[3];
char Hour[2];
char Min[3];
char Second[3];
} TIME;int main(){
TIME A={"2010","12","16","17","20","00"}; // 2010-12-16-17:20:00
TIME B;
char Time_A[26];
char Time_B[26];
long lSec;//将时间转为26位字符串形式
memcpy(Time_A ,A.Year , 4 );
memcpy(&Time_A[4] ,"-" , 1 );
memcpy(&Time_A[5] ,A.Month , 2 );
memcpy(&Time_A[7] ,"-" , 1 );
memcpy(&Time_A[8] ,A.Day , 2 );
memcpy(&Time_A[10] ,"-" , 1 );
memcpy(&Time_A[11] ,A.Hour , 2 );
memcpy(&Time_A[13] ,":" , 1 );
memcpy(&Time_A[14] ,A.Min , 2 );
memcpy(&Time_A[16] ," " , 1 );
memcpy(&Time_A[17] ,A.Second, 2 );
memcpy(&Time_A[19] ,".000000", 7 );
printf("%.*s\n",26,Time_A);SubTimeAdd(Time_B,Time_A,10);//加10秒
printf("%.*s\n",26,Time_B);SubTimeMinus(Time_B,Time_A,&lSec);//B - A
printf("%d\n",lSec);
//再将字符串中的小时、分、秒拷贝到结构体中
}
/**************************************************************************/
/* */
/* Name : SubTimeMinus( ) */
/* */
/* Outline : EndTime Minus BeginTime */
/* iSecond:时间差,单位秒 */
/* */
/**************************************************************************/
static long SubTimeMinus(char *cBeginTime,char *cEndTime,long *iSecond)// cEndTime必须大于等于cBeginTime ,且相差不能超过long ,精度为秒,毫秒级别不加减
{
char sYear_B[5],sMon_B[3],sDay_B[3],sHour_B[3],sMin_B[3],sSec_B[3];
char sYear_E[5],sMon_E[3],sDay_E[3],sHour_E[3],sMin_E[3],sSec_E[3];
int iYear_B=0,iMon_B=0,iDay_B=0,iHour_B=0,iMin_B=0,iSec_B=0;
int iYear_E=0,iMon_E=0,iDay_E=0,iHour_E=0,iMin_E=0,iSec_E=0;
struct tm *ptGetTime_B,*ptGetTime_E;
time_t tTime_B,tTime_E;
char cNewTime_B[27],cNewTime_E[27];
time(&tTime_B); //初始化为本地时间
time(&tTime_E); //初始化为本地时间
ptGetTime_E=localtime(&tTime_E);
ptGetTime_B=localtime(&tTime_B); //连续调用localtime或mktime时,两个指针指向的是同一个地址;因此连续调用时先保留结果
//---------------------------------------------------------------------
//按[年&月&日&小时&分&秒&毫秒]拆分并转换成数字类型(除毫秒外) |
//---------------------------------------------------------------------
memset(sYear_B , '\0' ,5);
memset(sMon_B , '\0' ,3);
memset(sDay_B , '\0' ,3);
memset(sHour_B , '\0' ,3);
memset(sMin_B , '\0' ,3);
memset(sSec_B , '\0' ,3);
memset(sYear_E , '\0' ,5);
m
上一个:学好C和C++需要多长时间?
下一个:c++中窗口过程的问题