#c
#c
Вопрос:
Я пытаюсь разделить строку на ,
и присвоить их структуре.
Пример строки
char t1[] = "185213,Example Name,88";
И у меня есть эта структура.
typedef struct {
int studentNumber;
char studentName[200];
int grade;
} STUDENT;
STUDENT students[]= {
{...},
{...},
{...}
}
Я хочу разделить строку и вставить в массив students struct. Я имею в виду, что 185213 — это число, имя примера — это имя, а 88 — класс.
Ответ №1:
Если вы заранее знаете, что ваши строки всегда будут содержать только три поля в формате «%d,%s,%d», то вам не нужна сложная логика с циклами, проверкой ввода и так далее. Было бы достаточно чего-то более простого, разбирающего каждый элемент отдельно:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int studentNumber;
char *studentName;
int grade;
} STUDENT;
int main(){
STUDENT *student = malloc(sizeof(STUDENT));
student->studentName = malloc(201); // Space for 200 characters ''
char *eptr;
char t1[] = "185213,Example Name,88";
char *token = strtok(t1, ","); // Read studentNumber
student-> studentNumber = strtol(token, amp;eptr, 10);
token = strtok(NULL, ","); // Read the studentName
strcpy(student->studentName, token);
token = strtok(NULL, ","); // Read the grade
student-> grade = strtol(token, amp;eptr, 10);
printf("%dn", student-> studentNumber);
printf("%sn", student-> studentName);
printf("%dn", student-> grade);
...
}
Вы можете использовать функцию strtok для анализа строк на основе разделителя ","
, функцию strcpy для копирования строк, проанализированных из strtok
вашего struct
, и функцию strtol для анализа int
значения из строки, прочитанной из strtok
.
Разница между STUDENT
struct
тем, что я опубликовал, и вашим, заключается в том, что поле char *studentName
было динамически выделено (как правильно указано в комментариях).
Ответ №2:
Вы можете сделать это следующим образом (используя atoi()
from stdlib.h
и strcpy
from string.h
).
char t1[] = "185213,Example Name,88";
char * pch;
STUDENT s;
pch = strtok (t1,",");
if (pch != NULL) s.studentNumber = atoi(pch);
pch = strtok (NULL,",");
if (pch != NULL) strcpy(s.studentName, pch);
pch = strtok (NULL,",");
if (pch != NULL) s.grade = atoi(pch);