Strtok для каждой строки и поиск слова в c

  1. Я открываю входной файл
  2. я читаю это
  3. Сохранение двумерного массива
  4. разделить на токены
  5. сначала strtok для "\n" и сохраните его
  6. во-вторых, strtok для ":" игнорируйте его
  7. а затем strtok для "," и сохраните его
  8. Я хочу найти слово для каждой строки (которую я сохранил на шаге 5)
  9. Для поиска я использую strstr, но не могу этого сделать.

Я добавляю свой входной файл и код.

int
main ()
{
  FILE *fp;
  fp = fopen ("C:\\input.txt", "r");
  char *name[10][10];
  char row[100];
  char *token, *tkn, *tk;
  int h = 0, f = 0, l = 0;
  for (h = 0; h < 9; h++)
    {
      for (f = 0; f < 9; f++)
        name[h][f] = NULL;
    }
  while (fgets (row, sizeof (row), fp))
    {
      token = strtok (row, "\n");
      name[l][0] = strdup (token);
      //printf("%s",name[l][0]);
      tkn = strtok (token, ":");
      tk = strtok (tkn, ",");
      isim[l][1] = strdup (tk);
      if (strstr (name[l][1], name[l + 1][0]) == 0
          || strstr (name[l][1], name[l + 2][0]) == 0
          || strstr (name[l][1], name[l + 3][0]) == 0)
        {

        }
      l++;
    }
  fclose (fp);
}

Я хочу вставить связанный список с помощью этой функции.

struct AdjListNode{
char *courseName;
char *studentName;

struct AdjList *head;
struct AdjListNode *nextPtr;};
typedef struct AdjListNode node;
typedef struct AdjListNode* nodePtr;
typedef struct AdjListNode** nodePtrPtr;



nodePtr insertVertex(nodePtrPtr header,char *studentName,char *courseName){
nodePtr newNode, temp, prev;
// create node to insert and assign values to its fields
//newNode=createAdjListNode(studentName,courseName);
newNode=malloc(sizeof(node));
newNode->studentName=studentName;
newNode->courseName=courseName;
newNode->nextPtr=NULL;
// if LL empty
if (*header == NULL)
    *header=newNode;
// if LL not empty
else {
    temp=*header;
    while (temp != NULL && (strcmp(temp->courseName,newNode->courseName)<0)) {
        prev=temp;
        temp=temp->nextPtr;
    }
    while (temp!=NULL && (strcmp(temp->courseName,newNode->courseName)==0)) {
        printf("\n existent key \n");
        return temp;
    }
    // insert node in a sorted fashion
    if (temp!=NULL)
        newNode->nextPtr=temp;
    // if value to insert is the least in LL then have header point to node
    if (temp==*header)
        *header=newNode;
    // otherwise insert node in correct position
    else
        prev->nextPtr=newNode;
    }
    return newNode;}

Мой файл input.txt:

George    :Math1,History2,Math2
ELizabeth :Math2,Germany1,spanish1
Adam      :Germany1,History2,Math1

Я хочу создать график с названиями лекций и использовать список смежности. Для списка смежности мне нужно соединение двух лекций, но я застрял на этом шаге. Как я могу найти всю строку, а затем сохранить массив. Например, я ищу Math1 . это в 2 строки. И затем я хочу создать список adj Math1 -> History2-> Math2-> Germany1 для Math1. Пожалуйста, помогите мне


person joseph    schedule 21.12.2014    source источник
comment
Сначала заполните массив, а затем создайте свой список вне цикла while. Кроме того, не забудьте освободить память, выделенную strdup, в конце вашей программы. Проверяйте наличие указателей NULL при построении списка — strstr может аварийно завершать работу, если вы укажете аргумент NULL.   -  person Bug Killer    schedule 21.12.2014
comment
Хорошо, но я этого не делал. Как? @BugKiller   -  person joseph    schedule 21.12.2014
comment
Примечание. Поскольку token = strtok (row, "\n") и tkn = strtok (token, ":"); могут возвращать NULL, защитное кодирование будет учитывать это.   -  person chux - Reinstate Monica    schedule 21.12.2014
comment
Ваше определение связности в графе было неясным, но я уверен, что вы можете построить его, запустив цикл for над элементами массива. Создайте связанный список для каждого найденного токена и добавьте элементы в список.   -  person Bug Killer    schedule 21.12.2014
comment
Я попробую. Они не возвращают NULL . @chux Знаете ли вы ответ на вопрос?   -  person joseph    schedule 21.12.2014
comment
Я хочу создать график с уроками. Я пишу метод вставки, я вставляю их в связанный список, но мне нужно соединение для лекции. например, соседями Math1 являются History2,Math2,Germany1 и, например, соседями Math2 являются Math1,History2,Germany1,Spanish1 @BugKiller   -  person joseph    schedule 21.12.2014
comment
и теперь я добавляю свою функцию вставки в этот вопрос. Я редактирую вопрос с помощью функции вставки. Пожалуйста, помогите мне @BugKiller   -  person joseph    schedule 21.12.2014
comment
Я добавляю свою функцию вставки @BugKiller   -  person joseph    schedule 21.12.2014
comment
Возможный дубликат Сохранить массив с помощью strtok   -  person Armali    schedule 10.02.2017