Копирование массива символов и сортировка - PullRequest
0 голосов
/ 18 апреля 2020

Цель: , чтобы сохранить последние 5 дат из очень большого банка дат без сохранения всех дат. Это будет выполняться на микроконтроллере в стиле Arduino, но я подумал, что это больше относится к языку C в целом.

Мой текущий метод заключается в копировании массива даты из 6 di git даты (гггмм ) в последнюю позицию массива из 6 дат, сортируйте от самой последней до самой ранней, а затем выполняйте итерацию по всему банку дат.

Вот полный рабочий код:

int compareDates(const void *a, const void *b) 
{ 
    const char **ia = (const char **)a;
    const char **ib = (const char **)b;
    return -strcmp(*ia, *ib);
} 

int main(){

    char *latestDates[] = {"200418","991201","020718","050607","121030","000000"};
    size_t len = sizeof(latestDates) / sizeof(char *);

    char newDate[][7] = {"071122","150101"};
    size_t numNewDates = sizeof(newDate)/sizeof(newDate[0]);

    for(uint i=0; i<numNewDates; i++){

        latestDates[5] = (char*)malloc(7);
        strcpy( latestDates[5], newDate[i] );

        cout << "Before sort: " << i << endl;
        for (int i=0; i<6; i++)
        {
          cout << latestDates[i] << endl;
        }

        qsort(latestDates, len, sizeof(char *), compareDates);

        cout << "After sort: " << i << endl;
        for (int i=0; i<6; i++)
        {
          cout << latestDates[i] << endl;
        }
    }

    free(latestDates[5]);

    return 0;
}

Код также можно запустить / отредактировать здесь: cpp .sh / 3rl7y3

Вопрос: как вывести зависимость от указателей и mallo c из ? то есть инициализировать latestDates[6][7] вместо *latestDates[].

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Вот некоторый код, который хранит массив указателей

char *latestDates[] = {"200418","991201","020718","050607","121030","000000"};
char newDate[] = "551122";

latestDates[5] = malloc(strlen(newDate) + 1);
strcpy(latestDates[5], newDate);

Я не утверждаю, что это хороший код или что-то в этом роде, но это законно.

1 голос
/ 18 апреля 2020

Попробуйте (если указатель не нужен)

char latestDates[][7] = {"200418","991201","020718","050607","121030","000000"};
...