2016-07-30 8 views
0

У меня есть структура определяется как нижеРазбиваем строку на элементы структуры

struct gtid{ 
    int id1; 
    int id2; 
    int num; 
} 

Как я могу преобразовать строку в виде «1-2-3» и инициализировать-структуру, соответственно, что является

gtid -> id1 = 1; 
    gtid -> id2 = 2; 
    gtid -> num = 3; 

Или Как передать строку в соответствующую структуру.

ответ

1

Вы можете прочитать отформатированные значения от stdin с помощью функции scanf и от строки с функцией sscanf. См. Полный пример ниже.

#include <stdio.h> 

typedef struct { 
    int id1; 
    int id2; 
    int num; 
} gtid_t; 

int main(void) { 
    gtid_t gtid; 

    // read from stdin 
    scanf("%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)); 
    printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num); 

    // read from string 
    char* str = "4-5-6"; 
    sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)); 
    printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num); 

    return 0; 
} 

Вывод будет выглядеть следующим образом

id1 = 1, id2 = 2, num = 3 
id1 = 4, id2 = 5, num = 6 

Как @ DavidC.Rankin упомянуть в комментариях лучше, чтобы проверить, что вход был успешным. Вы можете добавить if заявления как этот

if(sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)) != 3) { 
    fprintf(stderr, "Invalid input: %s\n", str); 
} 

В результате для str значения 4-a-6 этого пример печатает ошибку

Invalid input: 4-a-6 
+0

Спасибо, Извините, но я не хочу, чтобы прочитать его из стандартного ввода. Строка уже определена как char * str. И сначала мне нужно проверить, находится ли строка в правильном формате, а затем преобразовать ее. –

+1

@RebeccaTucker В моем ответе уже есть оба примера с 'stdin' и со строкой, определенной как' char * '. – NikolayKondratyev

+0

О, спасибо. Что помогает. пожалуйста, считаете ли вы необходимым проверить, соответствует ли строка правильному формату x-y-z перед преобразованием? Я тоже хотел бы это сделать. Я начал учиться программированию в понедельник. Пожелай мне удачи !! –