diff --git a/Program.cs b/Program.cs index e8f4893..ee3d82d 100644 --- a/Program.cs +++ b/Program.cs @@ -10,6 +10,7 @@ class Program { static void Menu() { Console.Clear(); int scelta; + string stringa; do { Console.WriteLine("Inserire un'opzione:"); Console.WriteLine("1. Verifica parola palindroma"); @@ -26,7 +27,14 @@ class Program { break; case 1: Console.Clear(); - if (ParolaPalindroma()) { + Console.Write("Inserire una parola: "); + stringa = Console.ReadLine(); + if (stringa.Contains(' ')) { + Console.WriteLine("È consentito inserire solo una parola. Per inserire una frase scegliere l'opzione 2."); + Pausa(); + break; + } + if (Palindromo(stringa)) { Console.WriteLine("La parola è palindroma"); } else { @@ -36,7 +44,8 @@ class Program { break; case 2: Console.Clear(); - if (FrasePalindroma()) { + Console.Write("Inserire una frase: "); + if (Palindromo(Console.ReadLine())) { Console.WriteLine("La frase è palindroma"); } else { @@ -91,20 +100,10 @@ class Program { return p_array; } - static bool ParolaPalindroma() { - string stringa; + static bool Palindromo(string stringa) { bool ritorno; char[] metà1, metà2; - do { - Console.Write("Inserire una parola: "); - 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 @@ -165,71 +164,35 @@ class Program { return ritorno; } - static bool FrasePalindroma() { - string stringa; - bool ritorno; - char[] metà1, metà2; + static void ContaStringa() { + string daEsserCercato, stringa; + int occorrenze; + Console.Write("Inserire il testo in cui cercare: "); + daEsserCercato = Console.ReadLine(); - Console.Write("Inserire una frase: "); + Console.Write("Inserire la frase da cercare: "); 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 in caratteri minuscoli per semplificare la ricerca + occorrenze = CercaStringa(daEsserCercato.ToLower(), stringa.ToLower()); - //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]; + Console.WriteLine($"La stringa {daEsserCercato} contiene {stringa} {occorrenze} volte"); + } - for (int i = 0; i < chars.Length; i++) { - bytes[i] = Convert.ToByte(chars[i]); - } + static int CercaStringa(string p_stringa1, string p_stringa2) { + int i = 0, ritorno = 0; - 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)), ""); - } - //******************************************************************************************************************************************************************************// + //creo un array per avere l'indice iniziale di ogni occorrenza del testo da trovare e lo riempio di -1 visto che sono indici non validi + int[] indiciOccorrenze = new int[p_stringa1.Length]; + for (int j = 0; j < indiciOccorrenze.Length; j++) { + indiciOccorrenze[j] = -1; } - //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; + while (p_stringa1.Contains(p_stringa2)) {//finché c'è un'occorrenza + ritorno++;//conta quante occorrenze ci sono state + indiciOccorrenze[i] = p_stringa1.IndexOf(p_stringa2);//salva l'indice iniziale dell'occorrenza + p_stringa1 = p_stringa1.Substring(indiciOccorrenze[i] + 1);//accorcia il testo per cercare oltre l'occorrenza appena trovata (1 serve per accorciare oltre la lettera) + i++; } return ritorno; } diff --git a/bin/Debug/net9.0/strings_2.dll b/bin/Debug/net9.0/strings_2.dll index 686c781..efc6321 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 b9f5c71..1755957 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 22d1b8a..0af3b09 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 22d1b8a..0af3b09 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 8f1e9ef..9c94894 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+aaad7bb7066b87b0eb2479e7abcd851c0c2aafcd")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+cf667c0c4c117b0320d2b3fdbf28dd46db0024dd")] [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 e11c9b5..9189921 100644 --- a/obj/Debug/net9.0/strings_2.AssemblyInfoInputs.cache +++ b/obj/Debug/net9.0/strings_2.AssemblyInfoInputs.cache @@ -1 +1 @@ -8cd12be905f68b2aa3f6e4d50027e58bfbdf6f37fa6b04bf359c870c810d393c +5416e09c1dd3f3100df7d43d8675ab055cd80c554816c1ae55c0ceb9397c8672 diff --git a/obj/Debug/net9.0/strings_2.dll b/obj/Debug/net9.0/strings_2.dll index 686c781..efc6321 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 b9f5c71..1755957 100644 Binary files a/obj/Debug/net9.0/strings_2.pdb and b/obj/Debug/net9.0/strings_2.pdb differ