From 745bcc0f39e0b3da136eb40fefd8e35e7fcd51a4 Mon Sep 17 00:00:00 2001 From: Uwe Wienkop <uwe.wienkop@th-nuernberg.de> Date: Tue, 30 Nov 2021 11:23:31 +0100 Subject: [PATCH] 2021-11-30 Abschluss String-Operationen --- 09 CaesarCodierung/09 CaesarCodierung.csproj | 9 +++ 09 CaesarCodierung/Program.cs | 41 ++++++++++ .../09 StringOperationen.csproj | 9 +++ 09 StringOperationen/Program.cs | 58 ++++++++++++++ 09 StringSplit/09 StringSplit.csproj | 9 +++ 09 StringSplit/Program.cs | 80 +++++++++++++++++++ Prog1_WS2021_22.sln | 30 +++++-- 7 files changed, 230 insertions(+), 6 deletions(-) create mode 100644 09 CaesarCodierung/09 CaesarCodierung.csproj create mode 100644 09 CaesarCodierung/Program.cs create mode 100644 09 StringOperationen/09 StringOperationen.csproj create mode 100644 09 StringOperationen/Program.cs create mode 100644 09 StringSplit/09 StringSplit.csproj create mode 100644 09 StringSplit/Program.cs diff --git a/09 CaesarCodierung/09 CaesarCodierung.csproj b/09 CaesarCodierung/09 CaesarCodierung.csproj new file mode 100644 index 0000000..2e7e888 --- /dev/null +++ b/09 CaesarCodierung/09 CaesarCodierung.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + <RootNamespace>_09_CaesarCodierung</RootNamespace> + </PropertyGroup> + +</Project> diff --git a/09 CaesarCodierung/Program.cs b/09 CaesarCodierung/Program.cs new file mode 100644 index 0000000..628c966 --- /dev/null +++ b/09 CaesarCodierung/Program.cs @@ -0,0 +1,41 @@ +using System; + +namespace _09_CaesarCodierung +{ + class Program + { + static string CaesarCodierung(string s, int shift) + { + string erg = ""; + + foreach (char c in s) + { + int codiert = c + shift; + + if (codiert > 'Z') // rechts hinausgelaufen + codiert -= 26; + else if (codiert < 'A') // links hinausgelaufen + codiert += 26; + erg += (char)codiert; + } + + return erg; + } + static void Main(string[] args) + { + // Shift=1: ABCZ --> BCDA + // Shift=2: ABCZ --> CDEB + // Shift=-1: ABCZ --> ZABY + + //Console.WriteLine(CaesarCodierung("ABCZ", 1)); + //Console.WriteLine(CaesarCodierung("ABCZ", 2)); + //Console.WriteLine(CaesarCodierung("ABCZ", -1)); + + Random wuerfel = new Random(); + string geheim = CaesarCodierung("HELLOWORLD", wuerfel.Next(1, 25)); + + for (int i = -1; i > -26; i--) + Console.WriteLine(CaesarCodierung(geheim, i)); + } + } +} diff --git a/09 StringOperationen/09 StringOperationen.csproj b/09 StringOperationen/09 StringOperationen.csproj new file mode 100644 index 0000000..3627b2c --- /dev/null +++ b/09 StringOperationen/09 StringOperationen.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + <RootNamespace>_09_StringOperationen</RootNamespace> + </PropertyGroup> + +</Project> diff --git a/09 StringOperationen/Program.cs b/09 StringOperationen/Program.cs new file mode 100644 index 0000000..2c7a736 --- /dev/null +++ b/09 StringOperationen/Program.cs @@ -0,0 +1,58 @@ +using System; +using System.Text; + +namespace _09_StringOperationen +{ + class Program + { + static void Main(string[] args) + { + string s = "Hello World!"; + // s[1] = 'E'; // NICHT ERLAUBT! Strings sind read-only!!! + + string s1 = s.Substring(6); // --> "World!" + string s2 = s.Substring(1, 4); // --> "ello" + + s.Contains("World"); // --> true + s.StartsWith("Hello"); // --> true + + s.Split(' '); // --> string[] {"Hello", "World!"} + + s.ToLower(); // --> "hello world!" + s.ToUpper(); // --> "HELLO WORLD!" + + s.IndexOf("World"); // --> 6 || -1 bei nicht-Vorkommen + s.IndexOf("o", 6); // --> 7 + + string s3 = ""; + for (char letter = 'A'; letter <= 'Z'; letter++) + { + // Console.WriteLine(letter); + s3 += letter; // "" + 'A' --> "A" + 'B' --> "AB" --> ... + } + Console.WriteLine(s3); + + DateTime t0 = DateTime.Now; + string s4 = ""; + for (int i=0; i<200000; i++) + s4 += "."; + DateTime t1 = DateTime.Now; + Console.WriteLine($"Rechenzeit: {(t1-t0).TotalMilliseconds}ms"); + + // s4 = "" Speicheranforderung 0 Zeichen + // s4 = "" + "." Speicheranforderung für 1 Zeichen; Umkopieren von "" und "." + // s4 = "." + "." Speicheranforderung für 2 Zeichen; Umkopieren von "." und "." + // s4 = ".." + "." Speicheranforderung für 3 Zeichen; Umkopieren von ".." und "." + + + + StringBuilder sb = new StringBuilder(200000); + for (int i = 0; i < 200000; i++) + sb.Append( "."); + s4 = sb.ToString(); + DateTime t2 = DateTime.Now; + Console.WriteLine($"Rechenzeit: {(t2 - t1).TotalMilliseconds}ms"); + Console.WriteLine(s4); + } + } +} diff --git a/09 StringSplit/09 StringSplit.csproj b/09 StringSplit/09 StringSplit.csproj new file mode 100644 index 0000000..f10ccdf --- /dev/null +++ b/09 StringSplit/09 StringSplit.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>netcoreapp3.1</TargetFramework> + <RootNamespace>_09_StringSplit</RootNamespace> + </PropertyGroup> + +</Project> diff --git a/09 StringSplit/Program.cs b/09 StringSplit/Program.cs new file mode 100644 index 0000000..18bf58c --- /dev/null +++ b/09 StringSplit/Program.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; + +namespace _09_StringSplit +{ + class Program + { + static bool IsLetter(char c) + { + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); + } + static string[] StringSplit(string s) + { + List<string> erg = new List<string>(); + int i = 0; + int anfWortInd; + + while (i < s.Length) + { + // 1. Solange String-Ende noch nicht erreicht: Etwaige Nicht-Buchstaben überspringen + while (i < s.Length && !IsLetter(s[i])) // ! ~ NOT + i++; + + // 2a. Wortanfangsposition merken + anfWortInd = i; + + + if (i < s.Length) + { + // 2b. Buchstaben des Worts durchlaufen bis entweder + // - String-Ende erreicht oder + // - Erstes Nicht-Buchstabenzeichen gefunden + while (i < s.Length && IsLetter(s[i])) + i++; + // 2c. Wortende minus Wortanfang = Wortlänge + // 3. Wort per SubString() entnehmen und der Liste hinzufügen + erg.Add(s.Substring(anfWortInd, i - anfWortInd)); + } + } + return erg.ToArray(); // s.Split(new char[] { ' ', '!' },StringSplitOptions.RemoveEmptyEntries); + } + + static void StringSplitTest(string s) + { + Console.WriteLine($"Gegeben: |{s}|"); + string[] sf = StringSplit(s); + foreach (string s1 in sf) + { + Console.WriteLine($" |{s1}|"); + } + Console.WriteLine("-------------"); + } + static void Main(string[] args) + { + //string s = " Dies ist ein Beispieltext!"; + //Console.WriteLine(s); + //Console.WriteLine(s.Substring(2)); + //Console.WriteLine(s.Substring(2,4)); + + StringSplitTest("Dies ist ein Beispieltext!"); + StringSplitTest(" Dies ist ein Beispieltext!"); + StringSplitTest("Dies ist ein Beispieltext"); + StringSplitTest(""); + StringSplitTest(" "); + + + + //List<string> freunde = new List<string>(); + //freunde.Add("Anton"); + //freunde.Add("Berta"); + //freunde.Add("Claudia"); + + //foreach (string freund in freunde) + //{ + // Console.WriteLine(freund); + //} + //string[] sf = freunde.ToArray(); + } + } +} diff --git a/Prog1_WS2021_22.sln b/Prog1_WS2021_22.sln index 034930f..a843ddd 100644 --- a/Prog1_WS2021_22.sln +++ b/Prog1_WS2021_22.sln @@ -65,17 +65,23 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "08 2D_Felder_Ubg_Di", "08 2 EndProject 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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "09 Contains_UebgMo", "09 Contains_UebgMo\09 Contains_UebgMo.csproj", "{560601CF-F420-4B9E-85A4-553236DA123A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 StringSplit", "09 StringSplit\09 StringSplit.csproj", "{E832992A-9736-400D-B1DD-7C76C1975210}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 StringOperationen", "09 StringOperationen\09 StringOperationen.csproj", "{C8566764-6360-4E7D-B570-06BD184252FC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09 CaesarCodierung", "09 CaesarCodierung\09 CaesarCodierung.csproj", "{663C2A15-A65A-4520-9125-A891A1D8CC4D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -231,6 +237,18 @@ Global {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 + {E832992A-9736-400D-B1DD-7C76C1975210}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E832992A-9736-400D-B1DD-7C76C1975210}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E832992A-9736-400D-B1DD-7C76C1975210}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E832992A-9736-400D-B1DD-7C76C1975210}.Release|Any CPU.Build.0 = Release|Any CPU + {C8566764-6360-4E7D-B570-06BD184252FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8566764-6360-4E7D-B570-06BD184252FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8566764-6360-4E7D-B570-06BD184252FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8566764-6360-4E7D-B570-06BD184252FC}.Release|Any CPU.Build.0 = Release|Any CPU + {663C2A15-A65A-4520-9125-A891A1D8CC4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {663C2A15-A65A-4520-9125-A891A1D8CC4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {663C2A15-A65A-4520-9125-A891A1D8CC4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {663C2A15-A65A-4520-9125-A891A1D8CC4D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- GitLab