29 - Escreve um programa que solicite ao utilizador um número de frases, e depois peça ao utilizador para inserir cada uma das frases individualmente. Cada frase deve ser dividida nas palavras que a compõem (removendo espaços e pontuação), sendo as respetivas palavras guardadas num array de strings. Por sua vez, cada array de strings deve ser guardado num array de arrays. Depois, o programa deve percorrer o array de arrays, e para cada array de strings indicar quantas palavras existem na respetiva frase, e qual a maior palavra.
Nota 1: O método
Split()
dos objectos do tipo string
devolve substrings da string original
separadas pelos caracteres passados ao método sob a forma de array de
chars
. Por exemplo:
string s = "A string with several words";
char[] separators = new char[] { ' ', ',', '.', ':', '\t' };
string[] arrayOfStrings = s.Split(separators);
Nota 2: Deve ser usada a keyword foreach
sempre que possível.
Exemplo de execução:
Numero de frases: 3
Frase 1: Ola Mundo
Frase 2: Uma frase mais comprida.
Frase 3: Esta e a ultima frase
Frase 1:
Numero de palavras: 2
Maior palavra: "Mundo"
Frase 2:
Numero de palavras: 4
Maior palavra: "comprida"
Frase 3:
Numero de palavras: 5
Maior palavra: "ultima"
using System;
class Program
{
static void Main(string[] args)
{
string[] phrases;
string[][] splitPhrases;
int numberOfPhrases;
// Char array for the separators in Split()
char[] separators = new char[]
{ ' ', ',', '.', ':', '\t', '!', '?','_'};
// Ask for a number of phrases
Console.Write("Number of phrases: ");
numberOfPhrases = Convert.ToInt32(Console.ReadLine());
// Initialize number of phrases on both of the arrays
phrases = new string[numberOfPhrases];
splitPhrases = new string[numberOfPhrases][];
// Ask for each phrase
for (int i = 0; i < numberOfPhrases; i++)
{
Console.Write($"Phrase {i + 1}: ");
phrases[i] = Console.ReadLine();
// Divide phrases in each word they contain removing empties
// with the option StringSplitOptions as second parameter
splitPhrases[i] = phrases[i].Split(separators,
StringSplitOptions.RemoveEmptyEntries);
}
Console.WriteLine();
// Iterate through all the phrases
for (int i = 0; i < numberOfPhrases; i++)
{
int longestWordLenght = 0;
string longestWord = null;
// Write the current phrase and it's length in words
Console.WriteLine($"Phrase {i + 1}: ");
Console.WriteLine($" " +
$"Number of words: {splitPhrases[i].Length}");
// Iterate over the words that phrase contains
// and checks for the longest
foreach (string word in splitPhrases[i])
{
// Save the word and it's length if it's longer than the
// previous one
if (word.Length > longestWordLenght)
{
longestWordLenght = word.Length;
longestWord = word;
}
}
Console.WriteLine($" Longest word: \"{longestWord}\"");
}
}
}