Итак, у меня есть этот текстовый файл (cartCoords.txt):
a = 2b, 1d; milk cheese eggs
b = 2a, 1e, 2c;
c = 2b, 1f;
d = 1a, 1g;
e = 1h, 1b;
f = 1i, 1c;
g = 1j, 1d;
h = 1k, 1e;
i = 1l, 1f;
j = 1m, 1g;
k = 1n, 1h;
l = 1o, 1i;
m = 2n, 1j;
n = 2m, 1k, 2o;
o = S, 2n, 1l;
Они представляют мою версию макета карты.Точка «а» находится в 2 единицах от «б» и в 1 единице от «д», а в точке а у нас есть пункты «молоко», «сыр» и «яйца».
Я построил структуру:
struct stopPoints {
char **items;
char connectingPoints[10];
int weights[10];
int startBool;
};
Таким образом, каждая «точка остановки» (a, b, c ... и т. Д.) Содержит список элементов (молоко, сыр и т. Д.)), список связанных точек (b и d в 2b и 1d), «вес» каждой соответствующей точки подключения (2 и 1 в 2b и 1d) и логическое значение, представляющее, является ли это начальной точкой или нет(обозначается буквой «S»).
Мне удалось сохранить каждую точку соединения и ее вес в структуре каждой точки, но у меня возникли проблемы с сохранением каждой отдельной строки элементов в массиве.хочу, чтобы каждая структура имела массив, в котором хранится каждый элемент в каждом индексе, например:
["milk", "cheese", "eggs"]
Как мне поступить?
Below is my code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
struct stopPoints {
char **theItem;
char connectingPoints[10];
int weights[10];
int startBool;
};
struct stopPoints makeStruct(char* str)
{
char items[10];
int i,j=0,k=0, l=0, semiCheck =0, a;
struct stopPoints point;
for(i=4; i<strlen(str); i++)
{
//check if its a starting point
if(i==4 && str[i] == 'S')
{
point.startBool = 1;
i+=3;
}
else if(i==4)
{
point.startBool = 0;
}
//if there's no semicolon present, proceed with the code
if (semiCheck == 0) {
//checks if its a number
if(str[i] < 58 && str[i] > 47){
point.weights[j] = str[i];
j++;
}
//checks if its a letter
else if(str[i] < 122 && str[i] > 96){
point.connectingPoints[k] = str[i];
k++;
}
else if (str[i] == 59){
semiCheck = 1;
i++;
}
}
else if(semiCheck==1){
for (a=1; a<(strlen(str)-i); a++){
if (str[i+a] != 32){
items[a-1] = str[i+a];
}
}
}
}
return point;
}
int main(){
int selections[100];
int numOfItems,x,y,j,z,temp;
int i = 0;
struct stopPoints store[26];
FILE *fp;
char str[60];
/* opening file for reading */
fp = fopen("cartCoords.txt" , "r");
if(fp == NULL) {
perror("Error opening file");
return(-1);
}
while( fgets (str, 600, fp)!= NULL ) {
/* writing content to stdout */
//printf("test1");
store[i] = makeStruct(str);
i++;
printf("store[%d] connecting points = %c and %c and %c\n", i-1, store[i-1].connectingPoints[0], store[i-1].connectingPoints[1], store[i-1].connectingPoints[2]);
}
fclose(fp);
return 0;
}
Выводэтой программы:
store[0] connecting points = b and d and
store[1] connecting points = a and e and c
store[2] connecting points = b and f and
store[3] connecting points = a and g and
store[4] connecting points = h and b and
store[5] connecting points = i and c and
store[6] connecting points = j and d and
store[7] connecting points = k and e and
store[8] connecting points = l and f and
store[9] connecting points = m and g and
store[10] connecting points = n and h and
store[11] connecting points = o and i and
store[12] connecting points = n and j and
store[13] connecting points = m and k and o
store[14] connecting points = n and l and
Так что я смог правильно хранить буквы и цифры. Я просто не знаю, как взять полную строку и сохранить ее в массив. Мой подход былчтобы мой цикл проверял точку с запятой (используя ее значение ascii), и однажды точка с запятойОбнаруженный, он начнет собирать каждую отдельную строку.Единственная проблема в том, что я понятия не имею, как это реализовать.