Skip to content

Latest commit

 

History

History
112 lines (93 loc) · 3.44 KB

File metadata and controls

112 lines (93 loc) · 3.44 KB

Problema

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"

Soluções

Solução 1

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}\"");
        }
    }
}