。两个字符串的格式均为00:00。第一个字符串(s1)表示飞机的特定出发时间,第二个字符串表示该出发的延迟时间... 这应该是在24小时内完成的。
比方说吧 S1 = 10:45 S1 = 01:50
所以首先我要添加5和0,看看是否有执行,如果结果低于9,则添加4和5,看看结果是否低于6.如果不是我将6减去加法并将执行(1)加到0和1,然后我将1添加到0.
5 + 0 = 5
4 + 5 = 9 9-6 = 3执行:1
0 + 1 + 1 = 2
0 + 1 = 1
12:35
我想获得的是s1 = 12:35
我真的不知道指针是如何工作的......我试图理解它们,但这是徒劳的......
你能帮助我吗?
我有一些想法,我将在这里发布:
#include <stdio.h>
#include <string.h>
char*add_hours(char s1[], char s2[])
int i;
for(i=4; i>3; i--){
if(s1[i]+s2[i]>9){
strcpy(s1[i], ((s1[i]+s2[i])-10);
strcpy(s1[i-1], (s1[i-1]+1));
}
...
}
代码会持续一段时间,但它会重复几次。所以我认为我不需要在这里复制它。问题是,他一直告诉我这个警告:
"warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast
/usr/include/string.h:128: note: expected 'const char * _restrict_' but argument if of type 'int'
对于第二个论点也是如此,对于每一个strcpy都有......我理解错误(我认为),但我不知道如何纠正它......
答案 0 :(得分:4)
我可能错了,但我认为你不想这样添加。
如果您在00:30和04:00到达时会发生什么情况,但在中间会发生夏令时?
填充time_t结构。将其转换为time_t。添加您的延迟,以秒为单位。将其转换回time_t。使用strftme()打印出来。让C库中的时间代码处理所有这些问题。
答案 1 :(得分:1)
首先,你应该删除for循环。它只进行了2次迭代,令人困惑 然后,你的函数的第一行应该是
char * sum = new char[5];
因为您可能想要返回一个新字符串。它也会让事情变得更加清晰。
尝试分解内容以简化问题。开始写作:
int minutes(char * s);
int hours(char * s);
分别返回以字符串表示的分钟数和小时数。
答案 2 :(得分:0)
strcpy
期望字符串(char / char指针数组)作为其参数。你给它的是单个字符。如果您想以这种方式修改单个字符,则无需使用strcpy
。
#include <stdio.h>
#include <string.h>
char*add_hours(char s1[], char s2[])
int i;
for(i=4; i>3; i--){
if(s1[i]+s2[i]>9){
s1[i] = (s1[i]+s2[i])-10;
s1[i-1] = s1[i-1]+1;
}
...
}
代码还存在其他逻辑问题,但这应该可以让您入门。
答案 3 :(得分:0)
#include <stdlib.h>
#include <string.h>
const int MINS_IN_HR = 60;
int StrToMins(char* str)
{
int res = 0;
char temp[3];
temp[2] = '\0';
memcpy(temp, str, 2);
res += atoi(temp)*MINS_IN_HR;
memcpy(temp, str+3, 2);
res += atoi(temp);
return res;
}
int _tmain(int argc, _TCHAR* argv[])
{
char* s1="10:45", *s2="01:50";
int totalMins = StrToMins(s1) + StrToMins(s2);
printf("%d:%d", totalMins / MINS_IN_HR, totalMins % MINS_IN_HR);
return 0;
}