116 lines
4.0 KiB
C#
116 lines
4.0 KiB
C#
namespace strings_2;
|
|
|
|
class Program {
|
|
static void Main(string[] args) {
|
|
Menu();
|
|
}
|
|
|
|
static void Menu() {
|
|
Console.Clear();
|
|
int scelta;
|
|
do {
|
|
Console.WriteLine("Inserire un'opzione:");
|
|
Console.WriteLine("1. Verifica parola palindroma");
|
|
Console.WriteLine("2. Verifica frase palindroma");
|
|
Console.WriteLine("3. Conta occorrenze");
|
|
Console.WriteLine("4. Sostituisci lettera");
|
|
Console.WriteLine("5. Prima lettere pari, poi dispari");
|
|
Console.WriteLine("0. Esci");
|
|
Console.Write("Scelta: ");
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
|
|
switch (scelta) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
Console.Clear();
|
|
if (Palindromo()) {
|
|
Console.WriteLine("La parola è palindroma");
|
|
}
|
|
else{
|
|
Console.WriteLine("La parola non è palindroma");
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 2:
|
|
Console.Clear();
|
|
|
|
Pausa();
|
|
break;
|
|
case 3:
|
|
Console.Clear();
|
|
|
|
Console.Clear();
|
|
break;
|
|
case 4:
|
|
Console.Clear();
|
|
|
|
Pausa();
|
|
break;
|
|
case 5:
|
|
Console.Clear();
|
|
|
|
Pausa();
|
|
break;
|
|
default:
|
|
Console.WriteLine("Opzione non valida.");
|
|
Pausa();
|
|
break;
|
|
}
|
|
}
|
|
while (scelta != 0);
|
|
}
|
|
|
|
static void Pausa() {
|
|
Console.WriteLine("Premere un tasto per continuare. . .");
|
|
Console.ReadKey();
|
|
Console.Clear();
|
|
}
|
|
|
|
static char[] InsertionSort(char[] p_array) { //implementazione ufficiale copiata da Classroom
|
|
int i, j;
|
|
char temp;
|
|
|
|
for (i = 1; i < p_array.Length; i++) {
|
|
temp = p_array[i];
|
|
j = i - 1;
|
|
while (j >= 0 && p_array[j] > temp) {
|
|
p_array[j + 1] = p_array[j];
|
|
j--;
|
|
}
|
|
p_array[j + 1] = temp;
|
|
}
|
|
|
|
return p_array;
|
|
}
|
|
|
|
static bool Palindromo() {
|
|
string stringa;
|
|
bool ritorno;
|
|
do {
|
|
Console.Write("Inserire una parola: ");
|
|
stringa = Console.ReadLine().ToLower(); //convertita in minuscolo per identificare palindromi case insensitive
|
|
if (stringa.Contains(' ')) {
|
|
Console.WriteLine("È consentito inserire solo una parola. Per inserire una frase scegliere l'opzione 2.");
|
|
Pausa();
|
|
}
|
|
}
|
|
while (stringa.Contains(' '));
|
|
|
|
char[] 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
|
|
char[] 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
|
|
|
|
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;
|
|
}
|
|
}
|