diff --git a/Program.cs b/Program.cs index 5fb0fd4..e8f4893 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,6 @@ -namespace strings_2; +using System.Text; + +namespace strings_2; class Program { static void Main(string[] args) { @@ -34,7 +36,12 @@ class Program { break; case 2: Console.Clear(); - + if (FrasePalindroma()) { + Console.WriteLine("La frase è palindroma"); + } + else { + Console.WriteLine("La frase non è palindroma"); + } Pausa(); break; case 3: @@ -90,13 +97,118 @@ class Program { char[] metà1, metà2; do { Console.Write("Inserire una parola: "); - stringa = Console.ReadLine().ToLower(); //convertita in minuscolo per identificare palindromi case insensitive + stringa = Console.ReadLine(); if (stringa.Contains(' ')) { Console.WriteLine("È consentito inserire solo una parola. Per inserire una frase scegliere l'opzione 2."); Pausa(); } } while (stringa.Contains(' ')); + + //modifica della stringa per trasformarla in una sequenza di lettere ASCII + { + stringa = stringa.ToLower();//convertita in minuscolo per identificare palindromi case insensitive + + //converto la stringa inserita da codifica Unicode a codifica ASCII + Encoding ascii = Encoding.ASCII; + Encoding unicode = Encoding.Unicode; + char[] chars = stringa.ToCharArray(); + byte[] bytes = new byte[chars.Length]; + + for (int i = 0; i < chars.Length; i++) { + bytes[i] = Convert.ToByte(chars[i]); + } + + Encoding.Convert(unicode, ascii, bytes); + + for (int i = 0; i < chars.Length; i++) { + chars[i] = Convert.ToChar(bytes[i]); + } + + //i numeri nei seguenti cicli for sono caratteri non lettere in codifica ASCII e separano i vari blocchi di questi caratteri che contornano i blocchi con le lettere + //******************************************************************************************************************************************************************************// + for (int i = 0; i <= 47; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + for (int i = 58; i < 64; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + for (int i = 91; i < 96; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + for (int i = 123; i < 127; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + //******************************************************************************************************************************************************************************// + } + + //la divisione serve per escludere la lettera che divide perfettamente a metà la parola con lettere dispari + if (stringa.Length % 2 == 0) { + metà1 = stringa.Substring(0, stringa.Length / 2).ToCharArray(); //divido la stringa a metà, prendo la prima e la converto in array di char per riordinarne le lettere + metà2 = stringa.Substring(stringa.Length / 2, stringa.Length / 2).ToCharArray(); //divido la stringa a metà, prendo la seconda e la converto in array di char per riordinarne le lettere + } + else { + metà1 = stringa.Substring(0, stringa.Length / 2).ToCharArray(); //divido la stringa a metà, prendo la prima e la converto in array di char per riordinarne le lettere + metà2 = stringa.Substring((stringa.Length / 2) + 1, stringa.Length / 2).ToCharArray(); //divido la stringa a metà, prendo la seconda e la converto in array di char per riordinarne le lettere + } + + string metàOrdinata1 = string.Join("", InsertionSort(metà1));//ordino la prima metà della stringa e la riconverto da array di char in stringa + string metàOrdinata2 = string.Join("", InsertionSort(metà2));//ordino la secondo metà della stringa e la riconverto da array di char in stringa + //le due metà prima vengono convertite in array di char per riordinarle, poi vengono convertite in stringa dopo essere state ordinate per calcolarne l'hash con il metodo integrato + + if (metàOrdinata1.GetHashCode() == metàOrdinata2.GetHashCode()) {//se l'hash delle due metà ordinate coincide + ritorno = true; + } + else { + ritorno = false; + } + return ritorno; + } + + static bool FrasePalindroma() { + string stringa; + bool ritorno; + char[] metà1, metà2; + + Console.Write("Inserire una frase: "); + stringa = Console.ReadLine(); + + //modifica della stringa per trasformarla in una sequenza di lettere ASCII + { + stringa = stringa.ToLower();//convertita in minuscolo per identificare palindromi case insensitive + + //converto la stringa inserita da codifica Unicode a codifica ASCII + Encoding ascii = Encoding.ASCII; + Encoding unicode = Encoding.Unicode; + char[] chars = stringa.ToCharArray(); + byte[] bytes = new byte[chars.Length]; + + for (int i = 0; i < chars.Length; i++) { + bytes[i] = Convert.ToByte(chars[i]); + } + + Encoding.Convert(unicode, ascii, bytes); + + for (int i = 0; i < chars.Length; i++) { + chars[i] = Convert.ToChar(bytes[i]); + } + + //i numeri nei seguenti cicli for sono caratteri non lettere in codifica ASCII e separano i vari blocchi di questi caratteri che contornano i blocchi con le lettere + //******************************************************************************************************************************************************************************// + for (int i = 0; i <= 47; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + for (int i = 58; i < 64; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + for (int i = 91; i < 96; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + for (int i = 123; i < 127; i++) { + stringa = stringa.Replace(Convert.ToString(Convert.ToChar(i)), ""); + } + //******************************************************************************************************************************************************************************// + } //la divisione serve per escludere la lettera che divide perfettamente a metà la parola con lettere dispari if (stringa.Length % 2 == 0) { diff --git a/bin/Debug/net9.0/strings_2.dll b/bin/Debug/net9.0/strings_2.dll index 46821f8..686c781 100644 Binary files a/bin/Debug/net9.0/strings_2.dll and b/bin/Debug/net9.0/strings_2.dll differ diff --git a/bin/Debug/net9.0/strings_2.pdb b/bin/Debug/net9.0/strings_2.pdb index d1dfa2f..b9f5c71 100644 Binary files a/bin/Debug/net9.0/strings_2.pdb and b/bin/Debug/net9.0/strings_2.pdb differ diff --git a/obj/Debug/net9.0/ref/strings_2.dll b/obj/Debug/net9.0/ref/strings_2.dll index 744dca4..22d1b8a 100644 Binary files a/obj/Debug/net9.0/ref/strings_2.dll and b/obj/Debug/net9.0/ref/strings_2.dll differ diff --git a/obj/Debug/net9.0/refint/strings_2.dll b/obj/Debug/net9.0/refint/strings_2.dll index 744dca4..22d1b8a 100644 Binary files a/obj/Debug/net9.0/refint/strings_2.dll and b/obj/Debug/net9.0/refint/strings_2.dll differ diff --git a/obj/Debug/net9.0/strings_2.AssemblyInfo.cs b/obj/Debug/net9.0/strings_2.AssemblyInfo.cs index 8ed454c..8f1e9ef 100644 --- a/obj/Debug/net9.0/strings_2.AssemblyInfo.cs +++ b/obj/Debug/net9.0/strings_2.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("strings_2")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+97c65ade8e1a0e7e912b959c732d32df692d42e4")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+aaad7bb7066b87b0eb2479e7abcd851c0c2aafcd")] [assembly: System.Reflection.AssemblyProductAttribute("strings_2")] [assembly: System.Reflection.AssemblyTitleAttribute("strings_2")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/obj/Debug/net9.0/strings_2.AssemblyInfoInputs.cache b/obj/Debug/net9.0/strings_2.AssemblyInfoInputs.cache index 0ccf65b..e11c9b5 100644 --- a/obj/Debug/net9.0/strings_2.AssemblyInfoInputs.cache +++ b/obj/Debug/net9.0/strings_2.AssemblyInfoInputs.cache @@ -1 +1 @@ -049a95f073c2bbaacb9a0f60962811b08e9cd32894ba1b07148583ce8cae646e +8cd12be905f68b2aa3f6e4d50027e58bfbdf6f37fa6b04bf359c870c810d393c diff --git a/obj/Debug/net9.0/strings_2.dll b/obj/Debug/net9.0/strings_2.dll index 46821f8..686c781 100644 Binary files a/obj/Debug/net9.0/strings_2.dll and b/obj/Debug/net9.0/strings_2.dll differ diff --git a/obj/Debug/net9.0/strings_2.pdb b/obj/Debug/net9.0/strings_2.pdb index d1dfa2f..b9f5c71 100644 Binary files a/obj/Debug/net9.0/strings_2.pdb and b/obj/Debug/net9.0/strings_2.pdb differ