문자열의 모든 순열을 인쇄하기 위해 다음 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);
}
}
내 (불완전한) 시도를 다음과 같이
자바 코드는 재귀 호출 루프. 재귀에 사용되는 동적 문자열 연결이 있습니다. 색인으로 표현하는 방법을 잘 모르겠습니다. 어떤 도움을 주셔서 감사합니다.
내 자바 녹슨이지만,이'문자열 remainString = end.substring없는 참조 (I + 1)'이'문자열과 같은 remainString = 끝; – alk
@alk : 아니요, Java는 반 개방 간격을 사용하므로 No입니다. 그래서'end.charAt (i)'는 빠져 있습니다. 이는 정확히이 문자가 끝에 추가되므로 의미가 있습니다. –