Как я могу добавить две строки? - PullRequest
2 голосов
/ 22 апреля 2011

размера 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 ]

4 голосов
/ 22 апреля 2011

Я могу ошибаться, но я думаю, что вы не хотите так добавлять.

Что произойдет, если у вас будет депатрирование в 00:30 и прибытие в 04:00, но переход на летнее время произойдет между ними?

Заполнить структуру time_t. Преобразуйте это в time_t. Добавьте вашу задержку в секундах. Преобразуйте это обратно в time_t. Распечатайте это, используя strftme (). Пусть временный код в библиотеке C решит все эти проблемы.

1 голос
/ 22 апреля 2011

Во-первых, вы должны удалить цикл for. Это просто делает 2 итерации, и это сбивает с толку.
Тогда первая строка вашей функции должна быть

 char * sum = new char[5];

поскольку вы, вероятно, хотите вернуть новую строку. Это также прояснит ситуацию.

Попробуйте разложить вещи, чтобы упростить вашу проблему. Начать писать:

int minutes(char * s);
int hours(char * s);

Это соответственно возвращает количество минут и часов, выраженных в строке. * * 1010

0 голосов
/ 22 апреля 2011
#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;
}
0 голосов
/ 22 апреля 2011

strcpy ожидает строки (массив указателя на символ / символ) в качестве своих параметров. То, что вы даете, это отдельные символы. Если вы хотите изменить отдельные символы таким образом, нет необходимости использовать 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;
    } 
...
}

Существуют и другие логические проблемы с кодом, но с этого следует начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...