2013-02-14 2 views
2

나는 C를 배우려고 노력하고 있는데, 이렇게하는 좋은 방법은 파이썬에서했던 프로그래밍 문제를 수정하는 것이라고 생각했습니다. 나는 현재 this에서 일하고 있습니다. C에서 파이썬 문자열 동작 복제

은 내 솔루션 :이 기능에 따라 새로운 문자열이 10 + "결과"10 "의 결과를" "즉, 전화를 작성 곳 재귀 함수 호출 할 때

def main(): 
    nums = ["10", "9", "8", "7", "6", "5", "4", "3", "2", "1"] 
    ops = ["+", "-", "*", "/", ""] 

    recursive(nums, ops, "", 0) 

def recursive(nums, ops, current_str, num_ind): 
    if num_ind == len(nums)-1: 
     # print current_str + nums[num_ind] 
     if eval(current_str + nums[num_ind]) == 2013: 
      print current_str + nums[num_ind] 
     return 0 
    else: 
     current_str = current_str + nums[num_ind] 
     num_ind += 1 
     for i in range(len(ops)): 
      recursive(nums, ops, current_str+ops[i], num_ind) 

파이썬은 10", "어떤 마법을 수행 모든 순열에 대해 "-", "10 *", "10 /", "10"등등. 당신이 인쇄 문을 주석 처리하면 예 :

10+9+8+7+6+5+4+3+2+1 
10+9+8+7+6+5+4+3+2-1 
10+9+8+7+6+5+4+3+2*1 
10+9+8+7+6+5+4+3+2/1 
10+9+8+7+6+5+4+3+21 

C에서 메모리 할당과 문자열로 얼마나 손을 당신에 보면, "분기"행동의 종류를 할도 가능하다 C에서 파이썬 전시 ?

는 UPDATE :

은 당신이 할 수 물론

int recursive(char** nums, char** ops, char* current_str, int num_ind){ 
    int i, ret; 
    char new_str[100]; 

    num_ind++; 
    if(num_ind == 9){ 
     //printf("%s\n", strcat(current_str,nums[num_ind])); 
     ret = eval(strcat(current_str, nums[num_ind])); 
     if(ret == 2013){ 
      printf("%s\n", current_str); 
     } 
     return 0; 
    } 
    for(i=0; i<5; i++){ 
     strcpy(new_str, current_str); 
     strcat(new_str, nums[num_ind]); 
     recursive(nums, ops, strcat(new_str, ops[i]), num_ind); 
    } 
} 
+0

파이썬은 C로 구현됩니다. 따라서 가능합니다 :-) 새로운 문자열 각각에 대해 메모리를 할당하고 수동으로 할당 된 메모리에 문자열 내용을 채워야합니다. – Cameron

+2

'eval'은 외부 라이브러리 없이는 구현하기가 상당히 어려울 것입니다 ... – nneonneo

+0

Nitpick ... CPython은 C로 구현됩니다. – wim

답변

0

, 그것을 알아 냈다. 각 호출에 대해 메모리를 할당하려면 mallocfree을 사용하십시오. 컴파일러처럼 텍스트를 처리하는 매우 복잡한 프로그램은 C로 작성됩니다. 이들은 Python과 비교할 때 매우 고통 스럽습니다. 또는 C++을 사용할 수 있습니다. C++에는 문자열 클래스가있어 문자열 연결과 같은 기본적인 작업을보다 쉽게 ​​수행 할 수 있습니다.