2013-06-28 2 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 언어에 익숙하므로 위의 함수를 파이썬에서 작성했습니다. 그것이하는 일은 10 x 10의리스트를 검색하는 것이고 만약 하나의 행이 *로 채워지면 그것을 삭제하고 맨 위에 새로운 빈 행을 넣을 것입니다.파이썬에서 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