2014-07-15 2 views
-4

프로그래밍을 처음 사용합니다 (C#).가능한 모든 단어를 생성하는 방법

응용 프로그램은 '단어 생성기'입니다.

내가 찾고있는 루프는 가능한 단어를 주어진 문자 배열에 포함 할 수있는 루프를 생성 할 수 있습니다.

세부 사항은 : (: 4 글자 길이 예를 들어)이 문자 세트를

나는 List<char> = { A,a,6,w,# } 나는 가능한 모든 단어를 생성 할

(길이는 다를 수 있음)이있다. 이 옵션은 5 characters & 4 letters = 5*5*5*5 = 625 words을 생성해야합니다.

All generated words should be every possible combination of the given letters only

참고 : 일부는 내가라는 솔루션을 사용한다는 것을 말해 수 은 (Permutations of a String/Integer) 이 방법은 필요한 단어 길이가 주어진 문자의 길이와 같은 경우 잘 될 것 같다,하지만 내 경우에는 내가 응용 프로그램 100 개 문자를주고,하지만 난 가능한 모든 단어를 생성 할 수 있습니다 -> 4 글자 길이 (예 : 마크, M @ RK, m4rK ...) 당신은 IEnumerable<String> 방법을 사용할 수 있습니다

+2

정확히 무엇이 문제입니까? – kviiri

+1

3 개의 교차 결합 사용 – Olivier

+0

시도한 내용은 무엇입니까? 이것의 90 %가 알고리즘이며, 간단한 알고리즘입니다. 인터넷 검색은 알고리즘 설계가 아닙니다. – Gene

답변

3

:

public IEnumerable<String> GenerateStrings (IEnumerable<char> characters, int length) { 
    if(length > 0) { 
     foreach(char c in characters) { 
      foreach(String suffix in GenerateStrings(characters,length-1)) { 
       yield return c+suffix; 
      } 
     } 
    } else { 
     yield return string.Empty; 
    } 
} 
csharp (대화 형 C#을 쉘)와

결과 :

csharp> Foo.GenerateStrings(new char[] {'A','a','6','w','#'},3) 
{ "AAA", "AAa", "AA6", "AAw", "AA#", "AaA", "Aaa", "Aa6", "Aaw", "Aa#", "A6A", "A6a", "A66", "A6w", "A6#", "AwA", "Awa", "Aw6", "Aww", "Aw#", "A#A", "A#a", "A#6", "A#w", "A##", "aAA", "aAa", "aA6", "aAw", "aA#", "aaA", "aaa", "aa6", "aaw", "aa#", "a6A", "a6a", "a66", "a6w", "a6#", "awA", "awa", "aw6", "aww", "aw#", "a#A", "a#a", "a#6", "a#w", "a##", "6AA", "6Aa", "6A6", "6Aw", "6A#", "6aA", "6aa", "6a6", "6aw", "6a#", "66A", "66a", "666", "66w", "66#", "6wA", "6wa", "6w6", "6ww", "6w#", "6#A", "6#a", "6#6", "6#w", "6##", "wAA", "wAa", "wA6", "wAw", "wA#", "waA", "waa", "wa6", "waw", "wa#", "w6A", "w6a", "w66", "w6w", "w6#", "wwA", "wwa", "ww6", "www", "ww#", "w#A", "w#a", "w#6", "w#w", "w##", "#AA", "#Aa", "#A6", "#Aw", "#A#", "#aA", "#aa", "#a6", "#aw", "#a#", "#6A", "#6a", "#66", "#6w", "#6#", "#wA", "#wa", "#w6", "#ww", "#w#", "##A", "##a", "##6", "##w", "###" } 

yield 문 방법을 사용의 장점은 게으른 것입니다 : 당신은 단지 모든 가능한 문자열이 생성됩니다하지 다섯 같은 문자열을 필요로하는 경우 먼저 ...

+2

다른 복사/붙여 넣기 가능 답변이 실제로는 질문이 아니지만 작동중인 구현에 대해 제공됩니다. –

+0

이것은 정확히 내가 뭘 찾고, 감사합니다, 그것은 복사/붙여 넣기 경우에도, 그것은 나를 위해 큰 도움이 처음 IEnumerable를 사용하고, 그것은 내가 당신에게 다시 감사를 필요로하는거야. – TrickyMood

관련 문제