2017-02-18 10 views
-1

У меня есть .txt файл, который содержит следующее:Сортировки последнего столбца в массиве строк в C

1 - Ground 2 
2 - Ground 7 
3 - City  1 
4 - Hill  x 
5 - City  3 
6 - City  4 
7 - Hill  6 

Задача состоит в том, чтобы упорядочить эти игровые слоты в определенном порядке: первого столбца файл является номер слота, то второго столбец файла является типом слота, а третьего столбца файла является номера слота, который расположен справа от паза в вопросе.

x означает, что ни одного слота справа от этого слота так, что это означает, что слот 4 (Хилл) является последним слотом в упорядоченных слотах. Таким образом, программа должна выполнить поиск по текстовому файлу, чтобы найти x, а затем посмотреть, что номер слота находится на этой строке, чтобы увидеть, какой слот находится слева от него. После завершения этого следует вывод следующее:

(5,City)->(3, City)->(1, Ground)->(2,Ground)->(7,Hill)->(6,City)->(4,Hill) 

Это мой код до сих пор:

Этот код читает в текстовый файл и печатает первоначальный список слотов. Любая помощь будет принята с благодарностью. Благодарю.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

const char *SLOTS_FILE_PATH = "slots.txt"; 

char slotsArr[7][100]; 
char newSlots[7][100]; 

int main() 
{ 
    int i = 0; 
    int j; 
    char search; 

    FILE *fx = fopen(SLOTS_FILE_PATH, "r+"); 

     if (fx == NULL) 
     { 
      perror("Error opening slots file"); 
      i = -1; 
     } 
     else 
     { 
      while(fgets(slotsArr[i], 
      sizeof(slotsArr[i]), fx) != NULL) 
     { 
      i++; 
     } 

      fclose (fx); 
     } 

    printf("\n-------Initial List of Slots-------\n"); 

    for (j = 0; j < i; j++) 
    { 
     printf("%s", slotsArr[j]); 
    } 

    printf("\n-------Sorted List of Slots-------\n"); 

    } 

********************* И это то, что он выводит **************** *********

-------Initial List of Slots------- 
1 - Ground 2 
2 - Ground 7 
3 - City  1 
4 - Hill  x 
5 - City  3 
6 - City  4 
7 - Hill  6 

-------Sorted List of Slots------- 
+2

Вам нужна структура, правильно считывающая данные в структуре 'qsort()' и соответствующие функции сравнения. –

+0

Вы понимаете, что ваши данные фактически являются (набором) связанных списков? (или D (A) G, или дерево ...) – wildplasser

+0

Вы уже узнали о типах 'struct'? Вы почти наверняка будете использовать его для этого упражнения. –

ответ

0

Напечатано, что в моем браузере, так что будут опечатки. (У меня есть повязка с одной стороны ...) Однако указатель:

char slotsArr[7][100]; 
char newSlots[7][100]; 
… 

// It starts with x 
char charToSearch = 'x'; // It doesn't matter, whether it is a digit or char. 
int sortedIndex = 7; // Start at the right side. 
while(sortedIndex>0) 
{ 
    // search for the row by iterating over the array and comparing the last letter. 
    for(int unsortedIndex=6; unsortedIndex>=0; unsortedIndex--) 
    { 
    if(charToSearch == slotsArr[unsortedIndex][16]) 
    { 
     charToSearch = slotsArr[unsortedIndex][0]; // The next item's index 
     sortedIndex--; 
     // The format of the result array is not clear in your Q. 
     // However, this is not the problem. I put a number and the trimmed 
     // string into it. You can add the parenthesis and the - at output, 
     // if you want to. 
     newSlots[sortedIndex][0]=charToSearch; 
     newSlots[sortedIndex][1]=','; 

     // Copy the string up to a space 
     char src = slotsArray[unsortedIndex]+7; 
     char *dest = newSlots[sortedIndex]+2; 
     while(!isspace(src)) 
     { 
     *dst++ = *src++; 
     } 
     *dst='\0'; 
     break; 
    } 
    } 
} 
Смежные вопросы