2009-12-25 18 views
7
List<string> list = new List<string>();  
     list.Add("A"); 
     list.Add("B"); 

List<string> list1 = new List<string>();  
     list.Add("a"); 
     list.Add("b"); 


    for (int i = 0; i < list.Count; i++) 
    { 
     // print another list items. 
     for (int j = 0; j < list1.Count; j++) 
     { 
      Console.WriteLine("/" + list[i] + "/" + list1[j]); 
     } 

    } 

Chcę taki kodować string tmpS =+ list[i];, aby dołączyć do następnego elementu listy.Elementy listy drukowania:

następnie wydrukować tmpS

ale błąd kompilacji CS0023: Operator '+' nie może być stosowany do argumentu typu 'string'.

Jak wydrukować wszystkie poniższe elementy. (Dowolny rodzaj jest ok)

Aa Ab Aab Aba AB ABA ABB Abab Abba B Ba Bb Baba Bba

(Numer Caps Brak wymiany. małe postacie powinny zostać zamienione. i zawsze podążaj za numerami czapek Dodaj małe znaki.)

+0

Jesteś tego pewien? Aab musi być w sekcji AB? – bniwredyc

+0

Witaj. Żadne sekcje nie są różne. po prostu potrzebuję wszystkich połączonych tematów powyżej. Lista połączyła jego przedmioty i połączyła jego elementy z kolejnymi elementami listy. –

Odpowiedz

3

Długo nie pracowałem nad czysto algorytmicznym problemem!

Program ten powinien załatwić sprawę:

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<string> uppers = new List<string>(); 
     uppers.Add("A"); 
     uppers.Add("B"); 

     List<string> lowers = new List<string>(); 
     lowers.Add("a"); 
     lowers.Add("b"); 

     List<string> combinedUppers = GetCombinedItems(uppers); 
     List<string> combinedLowers = GetCombinedItems(lowers); 
     List<string> combinedUppersLowers = GetCombinedList(combinedUppers, combinedLowers); 

     foreach (string combo in combinedUppersLowers) 
     { 
      Console.WriteLine(combo); 
     } 

     Console.Read(); 
    } 

    static private List<string> GetCombinedItems(List<string> list) 
    { 
     List<string> combinedItems = new List<string>(); 

     for (int i = 0; i < list.Count; i++) 
     { 
      combinedItems.Add(list[i]); 

      for (int j = 0; j < list.Count; j++) 
      { 
       if (list[i] != list[j]) 
       { 
        combinedItems.Add(String.Format("{0}{1}", list[i], list[j])); 
       } 
      } 
     } 

     return combinedItems; 
    } 

    static private List<string> GetCombinedList(List<string> list1, List<string> list2) 
    { 
     List<string> combinedList = new List<string>(); 

     for (int i = 0; i < list1.Count; i++) 
     { 
      combinedList.Add(list1[i]); 

      for (int j = 0; j < list2.Count; j++) 
      { 
       combinedList.Add(String.Format("{0}{1}", list1[i], list2[j])); 
      } 
     } 

     for (int i = 0; i < list2.Count; i++) 
     { 
      combinedList.Add(list2[i]); 

      for (int j = 0; j < list1.Count; j++) 
      { 
       combinedList.Add(String.Format("{0}{1}", list2[i], list1[j])); 
      } 
     } 

     return combinedList; 
    } 
} 

Pozdrawiam.


Ten program daje to wyjście:

Aa Aab Ab Aba AB ABA Abab ABB Abba B Ba Bab Bb Bba BA BAa BAab BAb BABA aA AAb aB aBA AB abA ABAB Abb ABBA b bA BAb bB BBA BA baa baAB BAb BABA

+0

@ TheRHCP. Testowałem więcej itmes dodanych dla List1 i List2, kiedy dodam A, B, C dla List1; a, b, c dla List2; Skrypt nie może zawierać więcej niż 4 znaki (takie jak ABCabc/ACadc/ABCab ... nie można drukować, ale chcę połączyć wszystkie warunki dla List1 i List2). Obecnie obsługuje tylko znaki NewString <= 4 znaki. –

+0

Algorytm, który ci podałem, nie może obsłużyć więcej niż 2 znaki po liście. Aby rozwiązać ten problem, musisz dostosować metodę GetCombinedItems. Myślę, że można go łatwo zastosować, ale algorytm do wdrożenia jest nieco bardziej skomplikowany w projektowaniu, ponieważ musi obsługiwać nieznaną liczbę znaków. W rzeczywistości ta metoda generuje listę wszystkich możliwych kombinacji znaków, myślę, że można znaleźć tego rodzaju algortihm w Internecie. – Ucodia

3

To pachnie jak praca domowa.

List<string> list = new List<string>();  
list.Add("A"); 
list.Add("B"); 

List<string> list1 = new List<string>();  
list.Add("a"); 
list.Add("b"); 

string xxx = ""; 
for (int i = 0; i < list.Count; i++) 
{ 
    xxx += list[i]; 
    Console.WriteLine(xxx); 

    // print another list items. 
    for (int j = 0; j < list1.Count; j++) 
    { 
     Console.WriteLine("/" + list[i] + "/" + list1[j]); 
    } 

} 
+0

Witaj Slugster, podążaj za przewodnikiem. Zauważyłem, że niektóre przedmioty nadal nie mogą zostać wydrukowane. –

3

To += nie =+.

Ale i tak powinieneś używać StringBuilder.

Powiązane problemy