From 1a86037e1ff3f49506760a130f38bad415dde1d0 Mon Sep 17 00:00:00 2001
From: Uwe Wienkop <uwe.wienkop@th-nuernberg.de>
Date: Mon, 29 Nov 2021 11:20:25 +0100
Subject: [PATCH] 2021-11-29 String-Operationen

---
 08 2D_Felder/Program.cs                       | 27 ++++--
 08 ZeichenkettenIntro/Program.cs              |  7 +-
 09 CompareTo/09 CompareTo.csproj              |  9 ++
 09 CompareTo/Program.cs                       | 47 +++++++++++
 09 Contains_UebgMo/09 Contains_UebgMo.csproj  |  9 ++
 09 Contains_UebgMo/Program.cs                 | 39 +++++++++
 09 Histogramm/09 Histogramm.csproj            |  9 ++
 09 Histogramm/Program.cs                      | 28 +++++++
 09 IstPalindrom/09 IstPalindrom.csproj        |  9 ++
 09 IstPalindrom/Program.cs                    | 12 +++
 09 PalindromFinal/09 PalindromFinal.csproj    |  9 ++
 09 PalindromFinal/Program.cs                  | 83 +++++++++++++++++++
 .../09 PalindromFinalTest.csproj              | 27 ++++++
 09 PalindromFinalTest/UnitTest1.cs            | 39 +++++++++
 09 Palindrom_Easy/09 Palindrom_Easy.csproj    |  9 ++
 09 Palindrom_Easy/Program.cs                  | 35 ++++++++
 Prog1_WS2021_22.sln                           | 40 ++++++++-
 17 files changed, 429 insertions(+), 9 deletions(-)
 create mode 100644 09 CompareTo/09 CompareTo.csproj
 create mode 100644 09 CompareTo/Program.cs
 create mode 100644 09 Contains_UebgMo/09 Contains_UebgMo.csproj
 create mode 100644 09 Contains_UebgMo/Program.cs
 create mode 100644 09 Histogramm/09 Histogramm.csproj
 create mode 100644 09 Histogramm/Program.cs
 create mode 100644 09 IstPalindrom/09 IstPalindrom.csproj
 create mode 100644 09 IstPalindrom/Program.cs
 create mode 100644 09 PalindromFinal/09 PalindromFinal.csproj
 create mode 100644 09 PalindromFinal/Program.cs
 create mode 100644 09 PalindromFinalTest/09 PalindromFinalTest.csproj
 create mode 100644 09 PalindromFinalTest/UnitTest1.cs
 create mode 100644 09 Palindrom_Easy/09 Palindrom_Easy.csproj
 create mode 100644 09 Palindrom_Easy/Program.cs

diff --git a/08 2D_Felder/Program.cs b/08 2D_Felder/Program.cs
index f9f17f9..a71c97e 100644
--- a/08 2D_Felder/Program.cs	
+++ b/08 2D_Felder/Program.cs	
@@ -21,7 +21,7 @@ namespace _08_2D_Felder
             int[,] f2 = new int[f1.GetLength(0), f1.GetLength(1)];
             for (int z = 0; z < f1.GetLength(0); z++)   // GetLength(n) ~ Anzahl der Elemente in der Dimension n
                 for (int i = 0; i < f1.GetLength(1); i++)
-                    f2[z,i] = f1[z, i];
+                    f2[z, i] = f1[z, i];
             return f2;
         }
         static void Main(string[] args)
@@ -51,7 +51,7 @@ namespace _08_2D_Felder
             for (int z = 0; z < h.GetLength(0); z++)
             {
                 for (int s = 0; s < h.GetLength(1); s++)    // .GetLength(1) ~ Anzahl der Spalten
-                    h[z, s] = (z+1)*100+s;
+                    h[z, s] = (z + 1) * 100 + s;
             }
             FeldAusgeben(h);
 
@@ -64,13 +64,13 @@ namespace _08_2D_Felder
 
             // Unterste Zeile mit 4 belegen:
             for (int i = 0; i < h.GetLength(1); i++)    // .GetLength(1) ~ Anzahl der Spalten
-                h[h.GetLength(0)-1, i] = 4;
+                h[h.GetLength(0) - 1, i] = 4;
             FeldAusgeben(h);
 
             int[,] hh = FeldKopieren(h);
 
             // Ganz linke Spalte von der zweiten bis zur vorletzten Zeile mit 2 belegen:
-            for (int z = 1; z < h.GetLength(0)-1; z++)    // .GetLength(0) ~ Anzahl der Zeilen
+            for (int z = 1; z < h.GetLength(0) - 1; z++)    // .GetLength(0) ~ Anzahl der Zeilen
                 h[z, 0] = 2;
             FeldAusgeben(h);
 
@@ -83,7 +83,7 @@ namespace _08_2D_Felder
 
             // Hauptdiagonale mit 5 belegen:
             int min = Math.Min(h.GetLength(0), h.GetLength(1));
-            for (int i = 0; i < min; i++)    
+            for (int i = 0; i < min; i++)
                 h[i, i] = 5;
             FeldAusgeben(h);
 
@@ -136,6 +136,23 @@ namespace _08_2D_Felder
 
             //int[] w6 = g1[..3];     // 1,2,3
             //int[] w7 = g1[..];      // Kopie von g1
+
+
+            // Aus https://docs.microsoft.com/de-de/dotnet/csharp/whats-new/tutorials/ranges-indexes
+            string[] words = new string[]
+                    {
+                                    // index from start    index from end
+                        "The",      // 0                   ^9
+                        "quick",    // 1                   ^8
+                        "brown",    // 2                   ^7
+                        "fox",      // 3                   ^6
+                        "jumped",   // 4                   ^5
+                        "over",     // 5                   ^4
+                        "the",      // 6                   ^3
+                        "lazy",     // 7                   ^2
+                        "dog"       // 8                   ^1
+                    };              // 9 (or words.Length) ^0
         }
     }
 }
+
diff --git a/08 ZeichenkettenIntro/Program.cs b/08 ZeichenkettenIntro/Program.cs
index 326d949..207d5bf 100644
--- a/08 ZeichenkettenIntro/Program.cs	
+++ b/08 ZeichenkettenIntro/Program.cs	
@@ -29,7 +29,8 @@ namespace _08_ZeichenkettenIntro
             foreach (char c in s)
             {
                 if (c >= 'a' && c <= 'z')           // Handelt es sich um einen Kleinbuchstaben?
-                    erg += (char)(c - ('a' - 'A'));  // Differenz zwischen Klein- u. Großbuchstaben abziehen
+                    erg += (char)(c - ('a' - 'A')); // Differenz zwischen Klein- u. Großbuchstaben abziehen
+                                                    // (char) Zeichenwert als char verwenden
                 else
                     erg += c;
             }
@@ -41,7 +42,7 @@ namespace _08_ZeichenkettenIntro
             foreach (char c in s)
             {
                 if (c >= 'A' && c <= 'Z')           // Handelt es sich um einen Kleinbuchstaben?
-                    erg += (char)(c + ('a' - 'A'));  // Differenz zwischen Klein- u. Großbuchstaben abziehen
+                    erg += (char)(c + ('a' - 'A'));  // Differenz zwischen Klein- u. Großbuchstaben hinzuaddieren
                 else
                     erg += c;
             }
@@ -53,6 +54,8 @@ namespace _08_ZeichenkettenIntro
 
             Console.WriteLine(InGrossbuchstabenKonvertieren(s));
             Console.WriteLine(InKleinbuchstabenKonvertieren(s));
+
+            ASCII_Tabelle();
         }
     }
 }
diff --git a/09 CompareTo/09 CompareTo.csproj b/09 CompareTo/09 CompareTo.csproj
new file mode 100644
index 0000000..a2d6109
--- /dev/null
+++ b/09 CompareTo/09 CompareTo.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_CompareTo</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/09 CompareTo/Program.cs b/09 CompareTo/Program.cs
new file mode 100644
index 0000000..9de5f8f
--- /dev/null
+++ b/09 CompareTo/Program.cs	
@@ -0,0 +1,47 @@
+using System;
+
+namespace _09_CompareTo
+{
+    class Program
+    {
+        static int CompareTo(string s1, string s2)
+        {
+            // gemeinsame Länge bestimmen
+            int len = Math.Min(s1.Length, s2.Length);
+
+            // Zeichen auf der gemeinsamen Länge vergleichen
+            for (int i = 0; i < len; i++)
+            {
+                int diff = s1[i] - s2[i];   // Differenz der jeweiligen Zeichen von s1 und s2
+                if (diff != 0)              // Unterschied gefunden?
+                    return diff;
+            }
+            
+            // Beide Zeichenketten sind auf der gemeinsamen Länge identisch
+            return s1.Length - s2.Length;
+        }
+        static void CompareToTest(string s1, string s2)
+        {
+            Console.WriteLine($"{s1,20} | {s2,20} | {CompareTo(s1,s2)}");
+        }
+        static void Main(string[] args)
+        {
+            string s1 = "abc";
+            string s2 = "abcd";
+
+            // s1.CompareTo(s2) 
+            //   --> 0:    wenn s1 == s2
+            //   --> neg.: wenn s1 < s2
+            //   --> pos.: wenn s1 > s2
+
+            CompareToTest("abc", "abdd");
+            CompareToTest("abc", "abc");
+            CompareToTest("abcde", "abc");
+            CompareToTest("abc", "def");
+
+
+
+
+        }
+    }
+}
diff --git a/09 Contains_UebgMo/09 Contains_UebgMo.csproj b/09 Contains_UebgMo/09 Contains_UebgMo.csproj
new file mode 100644
index 0000000..a56352b
--- /dev/null
+++ b/09 Contains_UebgMo/09 Contains_UebgMo.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_Contains_UebgMo</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/09 Contains_UebgMo/Program.cs b/09 Contains_UebgMo/Program.cs
new file mode 100644
index 0000000..d301b2c
--- /dev/null
+++ b/09 Contains_UebgMo/Program.cs	
@@ -0,0 +1,39 @@
+using System;
+
+namespace _09_Contains_UebgMo
+{
+    class Program
+    {
+        static bool Contains(string s, string enthalten)
+        {
+            for (int i = 0; i <= s.Length - enthalten.Length; i++)   // Schleife über s1-String
+            {
+                bool gefunden = true;                         // Annahme: Der Teilstring kommt ab dieser Pos. vor
+                for (int j = 0; j < enthalten.Length; j++)    // Schleife über enthalten-String
+                {
+                    if (s[i + j] != enthalten[j])
+                    {
+                        gefunden = false;
+                        break;
+                    }
+                }
+                if (gefunden)                   // Hat sich die Annahme erfüllt?
+                    return true;                // Ja: enthalten-String ist "enthalten"
+            }
+            return false;   // Der enthalten-String kommt an keiner Position (vollständig) vor
+        }
+        static void ContainsTest(string s1, string s2)
+        {
+            Console.WriteLine($"{s1,20} enthält {s2,-15} {Contains(s1,s2)}");
+        }
+        static void Main(string[] args)
+        {
+            ContainsTest("aaabcdef", "aaa");
+            ContainsTest("aaabcdef", "abc");
+            ContainsTest("aaabcdef", "abcx");
+            ContainsTest("aaabcdef", "def");
+
+            ContainsTest("def","aaabcdef");
+        }
+    }
+}
diff --git a/09 Histogramm/09 Histogramm.csproj b/09 Histogramm/09 Histogramm.csproj
new file mode 100644
index 0000000..76202b0
--- /dev/null
+++ b/09 Histogramm/09 Histogramm.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_Histogramm</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/09 Histogramm/Program.cs b/09 Histogramm/Program.cs
new file mode 100644
index 0000000..7bb7cdc
--- /dev/null
+++ b/09 Histogramm/Program.cs	
@@ -0,0 +1,28 @@
+using System;
+
+namespace _09_Histogramm
+{
+    class Program
+    {
+        static int[] Histogramm(string zeichenkette)
+        {
+            int[] histo = new int[26];
+            // histo[0] ~ Anzahl von 'A'
+            // histo[1] ~ Anzahl von 'B'
+            // histo[25] ~ Anzahl von 'Z'
+
+            foreach (char c in zeichenkette)
+                if (c >= 'A' && c <= 'Z')
+                    histo[c-'A']++;
+            return histo;
+        }
+        static void Main(string[] args)
+        {
+            int[] h = Histogramm("HELLO WORLD");
+            for (int i = 0; i < h.Length; i++)
+            {
+                Console.WriteLine($"{i,2} - {(char) (i+'A')}: {h[i]}");
+            }
+        }
+    }
+}
diff --git a/09 IstPalindrom/09 IstPalindrom.csproj b/09 IstPalindrom/09 IstPalindrom.csproj
new file mode 100644
index 0000000..999d1b5
--- /dev/null
+++ b/09 IstPalindrom/09 IstPalindrom.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_IstPalindrom</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/09 IstPalindrom/Program.cs b/09 IstPalindrom/Program.cs
new file mode 100644
index 0000000..a24c310
--- /dev/null
+++ b/09 IstPalindrom/Program.cs	
@@ -0,0 +1,12 @@
+using System;
+
+namespace _09_IstPalindrom
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            Console.WriteLine("Hello World!");
+        }
+    }
+}
diff --git a/09 PalindromFinal/09 PalindromFinal.csproj b/09 PalindromFinal/09 PalindromFinal.csproj
new file mode 100644
index 0000000..c96a984
--- /dev/null
+++ b/09 PalindromFinal/09 PalindromFinal.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_PalindromFinal</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/09 PalindromFinal/Program.cs b/09 PalindromFinal/Program.cs
new file mode 100644
index 0000000..abdf7e5
--- /dev/null
+++ b/09 PalindromFinal/Program.cs	
@@ -0,0 +1,83 @@
+using System;
+
+namespace _09_PalindromFinal
+{
+    public class Program
+    {
+        /// <summary>
+        /// Ausgangsbasis für den Palindromvergleich
+        /// </summary>
+        /// <param name="s">Zu testender String</param>
+        /// <returns></returns>
+        static bool IstPalindrom0(string s)
+        {
+            //s = s.ToLower();
+            for (int i = 0, j = s.Length - 1; i < j; i++, j--)
+            {
+                if (char.ToLower(s[i]) != char.ToLower(s[j]))
+                    return false;
+            }
+            return true;
+        }
+
+
+        static bool IstBuchstabe(char c)
+        {
+            return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+        }
+        public static bool IstPalindrom(string s)
+        {
+            bool mindEinZeichen = false;
+            int i = 0, j = s.Length - 1;
+            while (i <= j)
+            {
+                while (i <= j && IstBuchstabe(s[j]) == false)
+                    j--;        // rechten Index solange nach links setzen, bis ein Buchstabe gefunden wird
+
+                while (i <= j && IstBuchstabe(s[i]) == false)
+                    i++;        // dto. für linken Index
+
+                if (i <= j)
+                {
+                    if (char.ToLower(s[i]) != char.ToLower(s[j]))       // Sind die Buchstaben gleich?
+                        return false;
+                    else
+                        mindEinZeichen = true;
+                }
+                i++;    // linker Index ein Zeichen nach rechts
+                j--;    // rechter Index ein Zeichen nach links
+            }
+            return mindEinZeichen;
+        }
+        static void Palindromtest(string s)
+        {
+            Console.WriteLine($"{s,38} --> {IstPalindrom(s)}");
+        }
+
+        static void Main(string[] args)
+        {
+            // Nur Großbuchstaben
+            Palindromtest("ANNA");
+            Palindromtest("OTTO");
+            Palindromtest("ABA");
+            Palindromtest("RELIEFPFEILER");
+
+            // Großbuchstaben plus Sonderzeichen
+            Palindromtest("AB.A");
+            Palindromtest("NORBERT");
+
+            // Groß- und Kleinbuchstaben
+            Palindromtest("Hallo");
+            Palindromtest("Otto");
+            Palindromtest("..Ott    o!!!");
+            Palindromtest("Otto!!!");
+            Palindromtest("Regal mit Sirup pur ist im Lager!");
+            Palindromtest("......");
+            Palindromtest("!  !   .");
+            Palindromtest("");
+            Palindromtest("A");
+            Palindromtest("...A..");
+            Palindromtest("..A...");
+        }
+    }
+}
diff --git a/09 PalindromFinalTest/09 PalindromFinalTest.csproj b/09 PalindromFinalTest/09 PalindromFinalTest.csproj
new file mode 100644
index 0000000..3ac6d0f
--- /dev/null
+++ b/09 PalindromFinalTest/09 PalindromFinalTest.csproj	
@@ -0,0 +1,27 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_PalindromFinalTest</RootNamespace>
+
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
+    <PackageReference Include="xunit" Version="2.4.1" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+    <PackageReference Include="coverlet.collector" Version="3.0.2">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\09 PalindromFinal\09 PalindromFinal.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/09 PalindromFinalTest/UnitTest1.cs b/09 PalindromFinalTest/UnitTest1.cs
new file mode 100644
index 0000000..2ee1596
--- /dev/null
+++ b/09 PalindromFinalTest/UnitTest1.cs	
@@ -0,0 +1,39 @@
+using System;
+using Xunit;
+using _09_PalindromFinal;
+
+namespace _09_PalindromFinalTest
+{
+    public class PalindromTest
+    {
+        [Fact]
+        public void TestMitGrossbuchstaben()
+        {
+            Assert.True(Program.IstPalindrom("ANNA"), "Anna ist Palindrom");
+            Assert.True(Program.IstPalindrom("OTTO"), "OTTO ist Palindrom");
+            Assert.True(Program.IstPalindrom("ABA"), "ABA ist Palindrom");
+            Assert.True(Program.IstPalindrom("AB.A"), "ABA mit whitespace ist Palindrom");
+            Assert.False(Program.IstPalindrom("NORBERT"), "Norbert ist kein Palindrom");
+            Assert.False(Program.IstPalindrom("Hallo"), "Hallo ist kein Palindrom");
+            Assert.True(Program.IstPalindrom("RELIEFPFEILER"), "Reliefpfeiler ist Palindrom");
+        }
+        [Fact]
+        public void TestGemischt()
+        {
+            Assert.True(Program.IstPalindrom("Otto"), "Otto mit Kleinbuchstaben ist Palindrom");
+            Assert.True(Program.IstPalindrom("..Ott    o!!!"), "Otto mit umgebenden whitespaces");
+            Assert.True(Program.IstPalindrom("Otto!!!"), "Otto mit nachfolgenden whitespaces");
+            Assert.True(Program.IstPalindrom("Regal mit Sirup pur ist im Lager!"), "Regal mit Sirup...");
+        }
+        [Fact]
+        public void TestWhitespaces()
+        {
+            Assert.False(Program.IstPalindrom("......"), "Nur whitespaces1");
+            Assert.False(Program.IstPalindrom("!  !   ."), "Nur whitespaces2");
+            Assert.False(Program.IstPalindrom(""), "Leerstring");
+            Assert.True(Program.IstPalindrom("A"), "Alleinstehendes A");
+            Assert.True(Program.IstPalindrom("...A.."), "A mit umgebenden '.'");
+            Assert.True(Program.IstPalindrom("..A..."), "A mit umgebenden '.'");
+        }
+    }
+}
diff --git a/09 Palindrom_Easy/09 Palindrom_Easy.csproj b/09 Palindrom_Easy/09 Palindrom_Easy.csproj
new file mode 100644
index 0000000..71953e0
--- /dev/null
+++ b/09 Palindrom_Easy/09 Palindrom_Easy.csproj	
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <RootNamespace>_09_Palindrom_Easy</RootNamespace>
+  </PropertyGroup>
+
+</Project>
diff --git a/09 Palindrom_Easy/Program.cs b/09 Palindrom_Easy/Program.cs
new file mode 100644
index 0000000..0bfceff
--- /dev/null
+++ b/09 Palindrom_Easy/Program.cs	
@@ -0,0 +1,35 @@
+using System;
+
+namespace _09_Palindrom_Easy
+{
+    class Program
+    {
+        static bool IstPalindrom(string s)
+        {
+            for (int i = 0, j=s.Length-1; i < j; i++, j--)
+            {
+                if (s[i] != s[j])
+                    return false;       // kein Palindrom
+            }
+            return true;
+        }
+        static void IstPalindromTest(string s)
+        {
+            Console.WriteLine($"{s,30} --> {IstPalindrom(s)}");
+        }
+        static void Main(string[] args)
+        {
+            IstPalindromTest("ANNA");
+            IstPalindromTest("OTTO");
+            IstPalindromTest("ABCBA");
+            IstPalindromTest("NORBERT");
+
+            IstPalindromTest("ANN A");
+            IstPalindromTest("Anna");
+
+
+
+
+        }
+    }
+}
diff --git a/Prog1_WS2021_22.sln b/Prog1_WS2021_22.sln
index e5d0619..034930f 100644
--- a/Prog1_WS2021_22.sln
+++ b/Prog1_WS2021_22.sln
@@ -61,9 +61,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 RefVsOut", "08 RefVsOut\
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 2D_Felder", "08 2D_Felder\08 2D_Felder.csproj", "{EE89CDF4-D279-4F6D-82E0-26175D60DF5D}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08 2D_Felder_Ubg_Di", "08 2D_Felder_Ubg_Di\08 2D_Felder_Ubg_Di.csproj", "{00DFDFC9-A638-4392-934F-D83ADD9D9530}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 2D_Felder_Ubg_Di", "08 2D_Felder_Ubg_Di\08 2D_Felder_Ubg_Di.csproj", "{00DFDFC9-A638-4392-934F-D83ADD9D9530}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "08 ZeichenkettenIntro", "08 ZeichenkettenIntro\08 ZeichenkettenIntro.csproj", "{36213D4C-1100-4634-A883-1BC46FD24298}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 ZeichenkettenIntro", "08 ZeichenkettenIntro\08 ZeichenkettenIntro.csproj", "{36213D4C-1100-4634-A883-1BC46FD24298}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 Palindrom_Easy", "09 Palindrom_Easy\09 Palindrom_Easy.csproj", "{BD349A0C-121D-4705-8235-027626A20A11}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 PalindromFinal", "09 PalindromFinal\09 PalindromFinal.csproj", "{91016469-B34B-42B3-A4B7-7872847C8984}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 PalindromFinalTest", "09 PalindromFinalTest\09 PalindromFinalTest.csproj", "{4A14022F-4D0C-40FA-9ED3-46C77CE89308}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 CompareTo", "09 CompareTo\09 CompareTo.csproj", "{69FD48D6-46D0-494F-9AE6-54C6280D3C8D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 Histogramm", "09 Histogramm\09 Histogramm.csproj", "{9AC7E71B-8FC3-48CC-9963-B18CAC1D4413}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 Contains_UebgMo", "09 Contains_UebgMo\09 Contains_UebgMo.csproj", "{560601CF-F420-4B9E-85A4-553236DA123A}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -195,6 +207,30 @@ Global
 		{36213D4C-1100-4634-A883-1BC46FD24298}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{36213D4C-1100-4634-A883-1BC46FD24298}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{36213D4C-1100-4634-A883-1BC46FD24298}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BD349A0C-121D-4705-8235-027626A20A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BD349A0C-121D-4705-8235-027626A20A11}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BD349A0C-121D-4705-8235-027626A20A11}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BD349A0C-121D-4705-8235-027626A20A11}.Release|Any CPU.Build.0 = Release|Any CPU
+		{91016469-B34B-42B3-A4B7-7872847C8984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{91016469-B34B-42B3-A4B7-7872847C8984}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{91016469-B34B-42B3-A4B7-7872847C8984}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{91016469-B34B-42B3-A4B7-7872847C8984}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4A14022F-4D0C-40FA-9ED3-46C77CE89308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4A14022F-4D0C-40FA-9ED3-46C77CE89308}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4A14022F-4D0C-40FA-9ED3-46C77CE89308}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4A14022F-4D0C-40FA-9ED3-46C77CE89308}.Release|Any CPU.Build.0 = Release|Any CPU
+		{69FD48D6-46D0-494F-9AE6-54C6280D3C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{69FD48D6-46D0-494F-9AE6-54C6280D3C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{69FD48D6-46D0-494F-9AE6-54C6280D3C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{69FD48D6-46D0-494F-9AE6-54C6280D3C8D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9AC7E71B-8FC3-48CC-9963-B18CAC1D4413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9AC7E71B-8FC3-48CC-9963-B18CAC1D4413}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9AC7E71B-8FC3-48CC-9963-B18CAC1D4413}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9AC7E71B-8FC3-48CC-9963-B18CAC1D4413}.Release|Any CPU.Build.0 = Release|Any CPU
+		{560601CF-F420-4B9E-85A4-553236DA123A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{560601CF-F420-4B9E-85A4-553236DA123A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{560601CF-F420-4B9E-85A4-553236DA123A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{560601CF-F420-4B9E-85A4-553236DA123A}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
-- 
GitLab