Silva, osa dire che ho ridondanza....
This commit is contained in:
parent
cf667c0c4c
commit
4b05cdf4d4
105
Program.cs
105
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;
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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")]
|
||||
|
||||
@ -1 +1 @@
|
||||
8cd12be905f68b2aa3f6e4d50027e58bfbdf6f37fa6b04bf359c870c810d393c
|
||||
5416e09c1dd3f3100df7d43d8675ab055cd80c554816c1ae55c0ceb9397c8672
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user