namespace strings_1; class Program { static void Main(string[] args) { Console.Clear(); int scelta; do { Console.WriteLine("Inserire un'opzione:"); Console.WriteLine("1. Trova e sostituisci"); Console.WriteLine("2. Conta vocali e consonanti"); Console.WriteLine("3. Modifica stringa"); Console.WriteLine("4. Inverti le lettere"); Console.WriteLine("0. Esci"); Console.Write("Scelta: "); scelta = Convert.ToInt32(Console.ReadLine()); switch (scelta) { case 0: break; case 1: Console.Clear(); Console.WriteLine(TrovaESostituisci()); Pausa(); break; case 2: Console.Clear(); ContaLettere(); Pausa(); break; case 3: Console.Clear(); Pausa(); break; case 4: 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 string TrovaESostituisci() { string daEsserCercato, trova, sostituisci, ritorno; //Richiedo all'utente il testo in cui cercare, il testo da trovare e il testo con cui sostituire il testo trovato Console.Write("Inserire il testo in cui cercare: "); daEsserCercato = Console.ReadLine(); Console.Write("Inserire il testo da cercare: "); trova = Console.ReadLine(); Console.Write("Inserire il testo da sostituire: "); sostituisci = Console.ReadLine(); if (daEsserCercato.Contains(trova)) { ritorno = daEsserCercato.Replace(trova, sostituisci); } else { ritorno = $"Nessuna occorrenza di {trova} trovata in {daEsserCercato}"; } return ritorno; } static void ContaLettere() { string daEsserCercato, stringa; int vocali, consonanti; Console.Write("Inserire il testo in cui contare le lettere: "); daEsserCercato = Console.ReadLine(); stringa = daEsserCercato.ToLower();//converto la stringa in caratteri minuscoli per semplificare la ricerca delle lettere dopo //Queste sono due addizioni lunghissime perché ho voluto cercare di usare solo i metodi delle stringhe e non convertire la stringa in array per la ricerca vocali = CercaLettera(stringa, 'a') + CercaLettera(stringa, 'e') + CercaLettera(stringa, 'i') + CercaLettera(stringa, 'o') + CercaLettera(stringa, 'u'); consonanti = CercaLettera(stringa, 'b') + CercaLettera(stringa, 'c') + CercaLettera(stringa, 'd') + CercaLettera(stringa, 'f') + CercaLettera(stringa, 'g') + CercaLettera(stringa, 'h') + CercaLettera(stringa, 'j') + CercaLettera(stringa, 'k') + CercaLettera(stringa, 'l') + CercaLettera(stringa, 'm') + CercaLettera(stringa, 'n') + CercaLettera(stringa, 'p') + CercaLettera(stringa, 'q') + CercaLettera(stringa, 'r') + CercaLettera(stringa, 's') + CercaLettera(stringa, 't') + CercaLettera(stringa, 'v') + CercaLettera(stringa, 'w') + CercaLettera(stringa, 'x') + CercaLettera(stringa, 'y') + CercaLettera(stringa, 'z'); Console.WriteLine($"La stringa {daEsserCercato} contiene {vocali} vocali e {consonanti} consonanti"); } static int CercaLettera(string p_stringa, char p_lettera) { int i = 0, ritorno = 0; //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_stringa.Length]; for (int j = 0; j < indiciOccorrenze.Length; j++) { indiciOccorrenze[j] = -1; } while (p_stringa.Contains(p_lettera)) {//finché c'è un'occorrenza ritorno++;//conta quante occorrenze ci sono state indiciOccorrenze[i] = p_stringa.IndexOf(p_lettera);//salva l'indice iniziale dell'occorrenza p_stringa = p_stringa.Substring(indiciOccorrenze[i] + 1);//accorcia il testo per cercare oltre l'occorrenza appena trovata (1 serve per accorciare oltre la lettera) i++; } return ritorno; } }