From 4b05cdf4d4160be986363fb78f8cbf21b211f37c Mon Sep 17 00:00:00 2001 From: La Programmatrice Verde Date: Sat, 8 Feb 2025 23:32:23 +0100 Subject: [PATCH] Silva, osa dire che ho ridondanza.... --- Program.cs | 105 ++++++------------ bin/Debug/net9.0/strings_2.dll | Bin 7680 -> 8192 bytes bin/Debug/net9.0/strings_2.pdb | Bin 12228 -> 12312 bytes obj/Debug/net9.0/ref/strings_2.dll | Bin 5632 -> 5632 bytes obj/Debug/net9.0/refint/strings_2.dll | Bin 5632 -> 5632 bytes obj/Debug/net9.0/strings_2.AssemblyInfo.cs | 2 +- .../net9.0/strings_2.AssemblyInfoInputs.cache | 2 +- obj/Debug/net9.0/strings_2.dll | Bin 7680 -> 8192 bytes obj/Debug/net9.0/strings_2.pdb | Bin 12228 -> 12312 bytes 9 files changed, 36 insertions(+), 73 deletions(-) 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 686c781e7ea07aba80e20b05bd267870096cc5af..efc632124d43156e2ed7e7b181ce58730678e856 100644 GIT binary patch delta 3154 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 diff --git a/bin/Debug/net9.0/strings_2.pdb b/bin/Debug/net9.0/strings_2.pdb index b9f5c714fab0d250faa0bcc2b6e75330681124fe..17559574801fd47e9eacff1ed8388384b97a6dd0 100644 GIT binary patch delta 1304 zcmYjRZERCz6h7zl_V%{x(ht~Z%W##AjjbOxa~oNPAv#DAl5Mz5a4un`>!8S5(k?bL zvbANKL{vU50b8MY+_K{G5sOWP^~?Ac9T-2*MF4*&z`kKh@WW za!`wMZn@c~JUoz%5CkH}xxZrm?hd9Q$fuCm2-ABJGr{5cOL)>|-D(S>AVhnB4}#ml zbt?y=W<*iE4qQF)3_x)Y7&4;Hn!gu3^#J#Qp9b%#t^2{R6V213HN!d>?n1xM*MqlV zbH#N8XaHB&6^H{oP~+(u-w5u59)hS#1!9U>`lO{#0R<7&bp*oXRZOT2#Aa=$(FW*t zngHsw9q6E!fd(xAouoFZv#{PmkA*%9*I7t(96oD-g+`&1WoIj-km|mTR4U5rTl13pG($-R)F{QqjIn9gSDC>63Z z`9dyFlc`~d78;gAE!gJGnpc#kE9Akv)^_yoLn7WeQn>S&+hfLy5cv! zi8?0^oC+rHKl9I-R=;lk2UA^ss8f_93FeKzszdRN@PLLfLS_#3^Jd;g)A%TG`QsAJnd{Txmv zF1)pZQjakOWebYFcAzm0--x7jAhm2Hm|W7QQIG0dzu@bliE5GZZZBc}K|F3W4;DXr TxRJ{@xFS;iM=Dc|>izr=vna_t delta 1116 zcmZ`&TS!z<6y1BzbsQZZ*GXqaduWZBIy1MhDI&(S$kfapn9_qv6RN35G9#kW@!Du$ zM0SY!=>>iCAsO`>rBqNt5mX;RQ4m28^b^%beYDOrg+FocUT3X+_C0%_bN0R1{&2_H zNMDu^1$v2IV%$UEEj`__1G^7_Qq)0YXkTj!)q=0ryuP(@CC0PRkr4EX{arhu2bWFk zdpM_IUA)nIZ~XD=w%)gqdrai4FA&Ob5rLBzhBTC(8cT^hlntSi=m0&*Bae#nbcCKL zf*}z(N4|w~j0&b=*f4BUrHXJ#UlYD^;F09#M1_bors%cMY0zn@`CMHRv^%ADBBR!M z&;i75OwAWSuYs3J`-Jw^MVM~V6zS;eSC+(sz_jQJ{-<05fPaFf*AlD~UNtG?VB_ zVm>vfCo(htYk3^WPE=e4Mk~jGpM&Qd4LKc$I%6@~OWm=auI>Y>-{Di|9sMPNiG`E3 z1y6r|x_a$)M`--P;rrJ+KLzhjzH!aVZMuGRlUi)NDQU^CdEV0-{2u+e>)h~%x?dlU zHM_6OFW$C%Pju|YME)qa05_}Z z@GgIR46Vl7OPScUfoYzI8$fOq4*ByC3crR~f@35@jarMcooL`{0n~u0FP7CdojqL6 zwOr4MNgiyMey_BNJs?9jz1%;7M(6m+08?3Jvzun>8WxD|KGZ@p#Fb7ZPHd=D?`p2# z>dKIxGDJNM2b|81tUq*)@>?eRRfQD*9<-*Z_M|>&1*W4Bb&-w}i}gZX`15c$u2!sW zs4=U`_pjopfwH5?+QD?~jjR6Ee!7TH-(uTjyPEC&Y+q*kh1iok5SM`?oQO%HofAJK Z@r4HyGI*SarpZvIoO&T=9(i$vzX4v!t2Y1u diff --git a/obj/Debug/net9.0/ref/strings_2.dll b/obj/Debug/net9.0/ref/strings_2.dll index 22d1b8a4e342d16b756ef5f09a1ad13928fa6184..0af3b09065a41b78dbfcecd804149bd9f9e71fc8 100644 GIT binary patch delta 191 zcmZqBY0#O_!LsDf`Xd{AN|*(TnpofQ?Co{he=6Vn^v^4+Hw&`7XWaasbt(&n)Z`^x zC)AVE%*@P_4U$cg4Gqnc42+EoQjC&}(^8Vsj4V=8Ow3Y}3=E7+QZ`TKZe{gNW=LZ& z1446#WCjBuHUVNoAT(!40`iR+jDTbckW2!y(}1ibAZf&40c52B)tZ4t41j8kfV`B= Ise-dv0L&&iY5)KL delta 191 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 diff --git a/obj/Debug/net9.0/strings_2.pdb b/obj/Debug/net9.0/strings_2.pdb index b9f5c714fab0d250faa0bcc2b6e75330681124fe..17559574801fd47e9eacff1ed8388384b97a6dd0 100644 GIT binary patch delta 1304 zcmYjRZERCz6h7zl_V%{x(ht~Z%W##AjjbOxa~oNPAv#DAl5Mz5a4un`>!8S5(k?bL zvbANKL{vU50b8MY+_K{G5sOWP^~?Ac9T-2*MF4*&z`kKh@WW za!`wMZn@c~JUoz%5CkH}xxZrm?hd9Q$fuCm2-ABJGr{5cOL)>|-D(S>AVhnB4}#ml zbt?y=W<*iE4qQF)3_x)Y7&4;Hn!gu3^#J#Qp9b%#t^2{R6V213HN!d>?n1xM*MqlV zbH#N8XaHB&6^H{oP~+(u-w5u59)hS#1!9U>`lO{#0R<7&bp*oXRZOT2#Aa=$(FW*t zngHsw9q6E!fd(xAouoFZv#{PmkA*%9*I7t(96oD-g+`&1WoIj-km|mTR4U5rTl13pG($-R)F{QqjIn9gSDC>63Z z`9dyFlc`~d78;gAE!gJGnpc#kE9Akv)^_yoLn7WeQn>S&+hfLy5cv! zi8?0^oC+rHKl9I-R=;lk2UA^ss8f_93FeKzszdRN@PLLfLS_#3^Jd;g)A%TG`QsAJnd{Txmv zF1)pZQjakOWebYFcAzm0--x7jAhm2Hm|W7QQIG0dzu@bliE5GZZZBc}K|F3W4;DXr TxRJ{@xFS;iM=Dc|>izr=vna_t delta 1116 zcmZ`&TS!z<6y1BzbsQZZ*GXqaduWZBIy1MhDI&(S$kfapn9_qv6RN35G9#kW@!Du$ zM0SY!=>>iCAsO`>rBqNt5mX;RQ4m28^b^%beYDOrg+FocUT3X+_C0%_bN0R1{&2_H zNMDu^1$v2IV%$UEEj`__1G^7_Qq)0YXkTj!)q=0ryuP(@CC0PRkr4EX{arhu2bWFk zdpM_IUA)nIZ~XD=w%)gqdrai4FA&Ob5rLBzhBTC(8cT^hlntSi=m0&*Bae#nbcCKL zf*}z(N4|w~j0&b=*f4BUrHXJ#UlYD^;F09#M1_bors%cMY0zn@`CMHRv^%ADBBR!M z&;i75OwAWSuYs3J`-Jw^MVM~V6zS;eSC+(sz_jQJ{-<05fPaFf*AlD~UNtG?VB_ zVm>vfCo(htYk3^WPE=e4Mk~jGpM&Qd4LKc$I%6@~OWm=auI>Y>-{Di|9sMPNiG`E3 z1y6r|x_a$)M`--P;rrJ+KLzhjzH!aVZMuGRlUi)NDQU^CdEV0-{2u+e>)h~%x?dlU zHM_6OFW$C%Pju|YME)qa05_}Z z@GgIR46Vl7OPScUfoYzI8$fOq4*ByC3crR~f@35@jarMcooL`{0n~u0FP7CdojqL6 zwOr4MNgiyMey_BNJs?9jz1%;7M(6m+08?3Jvzun>8WxD|KGZ@p#Fb7ZPHd=D?`p2# z>dKIxGDJNM2b|81tUq*)@>?eRRfQD*9<-*Z_M|>&1*W4Bb&-w}i}gZX`15c$u2!sW zs4=U`_pjopfwH5?+QD?~jjR6Ee!7TH-(uTjyPEC&Y+q*kh1iok5SM`?oQO%HofAJK Z@r4HyGI*SarpZvIoO&T=9(i$vzX4v!t2Y1u