【急求】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);

#include <stdio.h>
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语言 求两个时间的差值的主要内容,如果未能解决你的问题,请参考以下文章

急求一道编程题

一道c语言的题目 急求代码

C语言问题,急求高手(05,4,44)

C语言模拟排队编程,急求完整答案

c语言编程 写一个函数,实现两个字符串的比较,即写一个类似于strcmp功能的函数。急求,谢谢!

急求一个c语言定义函数的程序,有一个参数但无返回值,实现输出一行n