2013-02-14 3 views
2

Я пытаюсь изучить C, и я думал, что хороший способ сделать это - это переработать некоторые программные проблемы праксиса, которые я сделал в python. В настоящее время я работаю над this.Репликация поведения строки python в C

Мое решение:

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) 

Python выполняет некоторые WITCHERY при выполнении рекурсивной функции вызовов, где он создает новую строку в функции называют то «» результаты «10», что приводит к «10+», «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

Python реализован на C. Так что да, возможно :-) Вам нужно будет выделить память для каждой новой строки и вручную заполнить выделенную память содержимым строки. – Cameron

+2

'eval', однако, будет существенно сложнее реализовать без внешних библиотек ... – nneonneo

+0

Nitpick ... CPython реализован в C. – wim

ответ

0

Конечно, вы можете. Используйте malloc и free для выделения памяти для каждого вызова. Некоторая очень сложная программа, обрабатывающая текст, например, компилятор, написана на C. Они просто очень болезненны по сравнению с Python. Или вы можете использовать C++, который имеет строковый класс, так что вы можете сделать базовую вещь, такую ​​как конкатенация строк, более легко.

Смежные вопросы