Skip to content
Snippets Groups Projects
Commit 1a86037e authored by Uwe Wienkop's avatar Uwe Wienkop
Browse files

2021-11-29 String-Operationen

parent bffb8ecf
Branches
No related tags found
No related merge requests found
Showing
with 429 additions and 9 deletions
......@@ -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
}
}
}
......@@ -30,6 +30,7 @@ namespace _08_ZeichenkettenIntro
{
if (c >= 'a' && c <= 'z') // Handelt es sich um einen Kleinbuchstaben?
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();
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_09_CompareTo</RootNamespace>
</PropertyGroup>
</Project>
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");
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_09_Contains_UebgMo</RootNamespace>
</PropertyGroup>
</Project>
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");
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_09_Histogramm</RootNamespace>
</PropertyGroup>
</Project>
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]}");
}
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_09_IstPalindrom</RootNamespace>
</PropertyGroup>
</Project>
using System;
namespace _09_IstPalindrom
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_09_PalindromFinal</RootNamespace>
</PropertyGroup>
</Project>
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...");
}
}
}
<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>
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 '.'");
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_09_Palindrom_Easy</RootNamespace>
</PropertyGroup>
</Project>
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");
}
}
}
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment