【急求】c语言 求两个时间的差值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【急求】c语言 求两个时间的差值相关的知识,希望对你有一定的参考价值。
输入如下所示的表示两个时刻的数据,输出两个时刻的时间差。
(第2个时刻的时大于第1个时刻的)有空格。
输入:
12 : 30 : 5 说明:表示第1个时刻12:30:05
14 : 40 : 1
输出:
2:9:56 说明: 表示时间差为2小时9分56秒
/*可以处理空格!!!*/
#include<stdio.h>
#include<string.h>
struct TTime
int h,m,s;
long GetSec()return 3600L*h+60*m+s;
void StrToTime(char _str[])
int i,j,len=strlen(_str);
/*去空格*/
for(i=0;i<len;++i)
if(_str[i]==' ')
for(j=i;j<len-1;++j)
_str[j]=_str[j+1];
--len;
i=-1;
continue;
/*读小时*/
j=0;
for(i=0;i<len;++i)
if(_str[i]==':')
break;
else
j=j*10 + _str[i]-'0';
h = j;
/*读分钟*/
j=0;
for(++i;i<len;++i)
if(_str[i]==':')
break;
else
j=j*10 + _str[i]-'0';
m = j;
/*读秒*/
j=0;
for(++i;i<len;++i)
j=j*10 + _str[i]-'0';
s = j;
void ToPlan(long t)
int hh,mm,ss;
hh = t/3600;
t%=3600;
mm = t/60;
t%=60;
ss=t;
printf("%2.2d:%2.2d:%2.2d\\n",hh,mm,ss);
Ta,Tb,Tc;
void main()
char a[105],b[105];
gets(a);
gets(b);
Ta.StrToTime(a);
Tb.StrToTime(b);
printf("sec: %ld, time: ",Tb.GetSec()-Ta.GetSec());
Tc.ToPlan(Tb.GetSec()-Ta.GetSec());
参考技术A #include <stdio.h>//一小时有3600秒
#define H_PER_SEC 3600
//一分钟有60秒
#define M_PER_SEC 60
typedef unsigned int time_type;
/*计算秒数*/
int cal_total_sec(const time_type h, const time_type m, const time_type s);
/*将相差秒数转化为hh:mm:ss格式结果保存在dh,dm,ds中*/
void trans_to_hms(const time_type d_sec, time_type *dh, time_type *dm, time_type *ds);
/*打印结果*/
void print_d_time(const time_type dh, const time_type dm, const time_type ds);
int main(void)
time_type h1, m1, s1;//第一个时刻h1:m1:s1
time_type h2, m2, s2;//第二个时刻h2:m2:s2
time_type total_sec1, total_sec2;//第一个时刻的秒数total_sec1,第二个时刻的秒数total_sec2
time_type d_sec;//两个时刻相差的秒数
time_type dh, dm, ds;//相差的时间dh:dm:ds
//读取两个时刻值
printf("输入时刻1[格式:hh : mm : ss]\n");
scanf("%d : %d : %d", &h1, &m1, &s1);
printf("输入时刻2[格式:hh : mm : ss]\n");
scanf("%d : %d : %d", &h2, &m2, &s2);
//计算两个时刻值的总秒数
total_sec1 = cal_total_sec(h1, m1, s1);
total_sec2 = cal_total_sec(h2, m2, s2);
//计算相差秒数
d_sec = total_sec2 - total_sec1;
//将相差秒数转化为dh:dm:ds格式
trans_to_hms(d_sec, &dh, &dm, &ds);
//打印转化结果
print_d_time(dh, dm, ds);
//等等用户输入任意字符
getch();
//结束程序
return 0;
/*计算秒数*/
int cal_total_sec(const time_type h, const time_type m, const time_type s)
return h * H_PER_SEC + m * M_PER_SEC + s;
/*将相差秒数转化为hh:mm:ss格式结果保存在dh,dm,ds中*/
void trans_to_hms(const time_type d_sec, time_type *dh, time_type *dm, time_type *ds)
*dh = d_sec / H_PER_SEC;
*dm = (d_sec - *dh * H_PER_SEC) / M_PER_SEC;
*ds = d_sec - *dh * H_PER_SEC - *dm * M_PER_SEC;
/*打印结果*/
void print_d_time(const time_type dh, const time_type dm, const time_type ds)
printf("--相差时间\n");
printf("%u:%u:%u\n", dh, dm, ds);
/*-----------------------------------------
请注意空格个数,必须遵循严格的输入个数
小时 : 分钟 : 秒数
在每个英文格式下的分号前有且仅有一个空格
------------------------------------------*/ 参考技术B http://zhidao.baidu.com/question/130460087.html
给你个地址,几乎原题。
其中也有我回答的。只不过没有空格,不过下面有个可以处理空格的。
c语言编程 写一个函数,实现两个字符串的比较,即写一个类似于strcmp功能的函数。急求,谢谢!
函数原型为: int strcompare(char *p1,char *p2)
设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二字母不同,“O”与“A”之差为79-65=14);即如果s1>s2,则输出正值;如果s1<s2,则输出负值。
注意:有程序前缀
例如:
输入:
CHINA↙
Chen↙
输出:
-32
前缀代码:
#include <stdio.h>
int strcompare (char *p1,char *p2);
int strcmp(char *s1, char *s2)
while((*s1++ == *s2++)&& *s1);
return (*s1 - *s2);
void main()
char a[10], b[10];
gets(a);
gets(b);
printf("%d\n", strcmp(a, b));
参考技术A #include <stdio.h>
#define N 4
int strcomp(char *s1,char *s2)
for(;*s1==*s2&&*s1&&*s2;s1++,s2++); /* 找不同的字符 */
return(*s1-*s2); /* 返回字符差值*/
void main()
char str[N][50];
int i,j;
for(i=0;i<N;i++)
printf("String #%d:",i+1);
gets(str[i]);
for(j=0,i=1;i<N;i++)
if(strcomp(str[j],str[i])>0) j=i;
printf("Min string is:%s\n",str[j]);
参考技术B #include <stdio.h>
int strcompare (char *p1,char *p2);
int main()
char p1[100],p2[100];
int ans;
gets(p1);
gets(p2);
ans = strcompare(p1,p2);
printf("%d\\n",ans);
return 0;
int strcompare (char *p1,char *p2)
int i;
for(i=0;p1[i]!='\\0' && p2[i]!='\\0';i++)
if(p1[i]==p2[i]) continue;
else return (p1[i]-p2[i]);
if(p1[i]=='\\0' && p2[i]=='\\0') return 0;
else if(p1[i]=='\\0') return -p2[i];
else return p1[i];
参考技术C 3137333的程序有问题,应是:
int strcmp(char *s1, char *s2)
while((*s1==*s2)&&*s1) s1++;s2++;
return(*s1-*s2);
原来程序返回的是不相同字符的下一字符的差值! 参考技术D #include <stdio.h>
int strcompare(char *p1, char *p2);
int main()
char s1[100];
char s2[100];
gets(s1);
gets(s2);
printf("%d\\n", strcompare(s1, s2));
system("pause");
int strcompare(char *p1, char *p2)
for (; *p1 == *p2&&*p1; p1++, p2++);
return *p1 - *p2;
本回答被提问者采纳
以上是关于【急求】c语言 求两个时间的差值的主要内容,如果未能解决你的问题,请参考以下文章