如何添加两个字符串?

时间:2011-04-22 14:56:39

标签: c string pointers

根据我将要施加的一些条件,我要添加5个

。两个字符串的格式均为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都有......我理解错误(我认为),但我不知道如何纠正它......

4 个答案:

答案 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;
}