2016-09-18 5 views
1

У меня есть следующий код java для распечатки всех перестановок строки. Я пытаюсь преобразовать его в код C. Однако, поскольку C не поддерживает родные строки, у меня возникают некоторые трудности при реализации.Перестановка в C - порт кода java

код Java выглядит следующим образом:

import java.io.*; 

class permute{ 

static void permuteString(String begin, String end){ 

     if(end.length() <= 1){ 
       System.out.println(begin+end); 
     } 
     else{ 
       for(int i=0; i<end.length(); i++){ 
         String remainString = end.substring(0,i) + end.substring(i+1); 
         permuteString(begin + end.charAt(i), remainString); 

       } 
     } 
} 

public static void main(String args[])throws Exception{ 

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    String s = br.readLine(); 
    permuteString("",s); 
} 

} 

My (неполную) попытку порта это в C выглядит следующим образом: -

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

void permute(char* arr, int beginstart, int beginend, int endstart, int endend){ 

     if(endend-endstart <= 1){ 
       int i=0; 
       for(i=beginstart; i<=beginend; i++){ 
         printf("%c",arr[i]); 
       } 

       for(i=beginend; i<=endend; i++){ 
         printf("%c",arr[i]); 
       } 
     } 

     else{ 
       int i=0; 
       for(i=0; i<=(endend-endstart); i++){ 
        //HAVING ISSUES IN THIS PART 
       } 
     } 

} 

int main(){ 

    char arr[3]={'a','b','c'};   
    permute(arr, 0,0,0,3); 
    return 0; 
} 

Я не ясно, на лучший путь к порту цикл с рекурсивным вызовом. Существует динамическая конкатенация строк, которая используется в рекурсии. Я не уверен, как представить его в терминах индексов. Любая помощь приветствуется.

+0

Мой Java является ржавый, но это не 'Строка remainString = end.substring (0, я) + end.substring (я + 1)' то же самое, как это 'Строка remainString = конец; '? – alk

+0

@alk: Нет, поскольку Java использует полуоткрытые интервалы. Поэтому 'end.charAt (i)' не учитывается. Это имеет смысл, так как именно этот символ добавляется в конце. –

ответ

0

Если вы действительно не изучаете C в этом примере, использование кода, написанного другими, проще. В Googling для c permute string появился очень хороший алгоритм, выполняющий всю перестановку на месте, поэтому вам не нужно выделять память.

См http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/

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

  • Нет связанных вопросов^_^