2016-09-18 2 views
1

문자열의 모든 순열을 인쇄하기 위해 다음 Java 코드가 있습니다. C 코드로 변환하려고합니다. 그러나 C는 네이티브 문자열을 지원하지 않기 때문에 구현에 어려움을 겪고 있습니다.C에서 순열 - Java 코드의 포트

#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; 
} 

나는 포트에 가장 좋은 방법에 명확하지 않다 - 다음과 같이 C로이이 포트에

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); 
} 

} 

내 (불완전한) 시도를 다음과 같이

자바 코드는 재귀 호출 루프. 재귀에 사용되는 동적 문자열 연결이 있습니다. 색인으로 표현하는 방법을 잘 모르겠습니다. 어떤 도움을 주셔서 감사합니다.

+0

내 자바 녹슨이지만,이'문자열 remainString = end.substring없는 참조 (I + 1)'이'문자열과 같은 remainString = 끝; – alk

+0

@alk : 아니요, Java는 반 개방 간격을 사용하므로 No입니다. 그래서'end.charAt (i)'는 빠져 있습니다. 이는 정확히이 문자가 끝에 추가되므로 의미가 있습니다. –

답변