2013-06-28 4 views
0
L = [[" " for i in range(10)] for j in range(10)] 

for i in range (10): 
    L[9][i]="*" 
for i in range (10): 
     L[8][i]="1" 
for i in range (10): 
     L[7][i]="*" 
for i in range (10): 
     L[6][i]="3" 
for i in range (10): 
     L[5][i]="*" 

print(L) 
print() 

def Check_Lines(l): 
    for i in range (10): 
     x=l[i].count("*") 
     if x == 10: 
      print ("LINE IS FULL") 
      del l[i] 
      l.reverse() 
      l.append([" "," "," "," "," "," "," "," "," "," "]) 
      l.reverse() 


Check_Lines(L) 
print (L) 

Я написал вышеприведенную функцию в Python, поскольку я больше знаком с языком python. Он выполняет поиск списка 10 на 10, и если одна строка заполнена *, тогда она удалит ее и поместит новую пустую строку вверху.Преобразование из Python в C Список функций

Я знаю, что c не имеет функций списка, которые я использовал. Есть ли какой-нибудь простой способ обойти то, что я делаю?

+0

Что вы пробовали? На языке C, конечно, нет собственного способа управления динамическими списками, у вас есть массивы, но для их динамического использования вам необходимо работать с указателями. – Jack

+0

Я не знал, с чего начать переписывать встроенные функции с помощью c. Я больше пытался заставить кого-то ответить тем, что вы сказали «Указатели», чтобы я мог посмотреть и понять, что мне нужно делать. Я вообще не знаю языка C, и я пытаюсь учиться. – user2532857

+0

Проведите некоторое исследование связанных списков. Вам придется реализовать сам список, но это будет образовательный опыт. :) –

ответ

1

В К сожалению, эта проблема будет довольно сложной. Вам потребуется выделить блок памяти для вашей матрицы. И когда вы захотите «удалить» строку, вам придется переместить все и освободить дополнительную память в нижней части матрицы.

Если вы можете использовать C++, это гораздо проще сделать с контейнерами STL. У вас может быть вектор векторов. Удаление строки было бы вызовом для удаления:

l.erase(pos) // pos is an iterator at the row you'd like to remove