Преобразовать массив символов в целые - PullRequest
2 голосов
/ 19 мая 2011

У меня есть массив символов в виде mm/dd/yy (поскольку пользователю было предложено ввести дату).

Как разделить массив, удалить / иположить mm, dd и yy в 3 разных целых числа?

Ответы [ 4 ]

5 голосов
/ 19 мая 2011

Я бы использовал sscanf для разбора строки:

int m, d, y;    
sscanf("05/18/11", "%02d/%02d/%02d", &m, &d, &y);

При этом дата будет разбита на три целочисленных значения.

Кроме того, чтобы убедиться, что входные данные были отформатированы правильно, вы также должны проверить, что sscanf вернул 3, указывая, что все три значения были правильно проанализированы. См. Следующий рабочий пример , который включает в себя некоторые основные проверки ошибок.

0 голосов
/ 19 мая 2011

Сначала найдите ближайший '/':

int i;
char *d = date;
for(i = 0; date[i] != '/'; ++i);

Затем примените «подстроку»:

strncpy(dd, date, i);

Повторите этот процесс:

d = date + i + 1;
for(; date[i] != '/'; ++i);
strncpy(mm, d, i - (d - date));

Затем просто перейдите от последнего '/' к концу строки:

d = date + i + 1;
strncpy(yy, d, strlen(date) - i);
0 голосов
/ 19 мая 2011
#include <stdlib.h>
#include <string.h>

int main()
{
    int month, day, year;
    char mystr[10] = "05/18/11";
    month = atoi(strtok(mystr, "/"));
    day = atoi(strtok(NULL, "/"));
    year = atoi(strtok(NULL, "/"));
    return 0;
}

strtok () - это функция, которая сначала вызывает строку и разделитель для разделения. После первого вызова он продолжит токенизацию той же строки, если вы передадите NULL в качестве первого аргумента. atoi преобразует строку в целое число.

Если ваш ввод действительно жесткий, sscanf хорош.

0 голосов
/ 19 мая 2011

Просмотрите strtok и atoi на полученных токенах.

Вы также можете использовать sscanf, нотокенизация обеспечивает большую гибкость формата ввода.

...