Médio C#

Métodos de string e StringBuilder

Enunciado

Leia uma frase do usuário. Exiba a frase sem espaços no início e no fim, em maiúsculas. Depois, use StringBuilder para inverter a frase caractere por caractere e exiba o resultado.

Requisitos

  • Ler uma frase com Console.ReadLine().
  • Exibir a frase com Trim() e ToUpper().
  • Inverter a frase usando StringBuilder e exibi-la.

Código inicial

using System;
using System.Text;

class Program
{
    static void Main()
    {
        // Seu código aqui
    }
}

Saída esperada

Frase formatada: HELLO WORLD
Frase invertida: DLROW OLLEH
Ver dica

Para inverter, percorra a string de trás para frente com um for e use sb.Append(frase[i]).

Mostrar solução
using System;
using System.Text;

class Program
{
    static void Main()
    {
        Console.Write("Digite uma frase: ");
        string frase = Console.ReadLine();

        // Trim e ToUpper
        string formatada = frase.Trim().ToUpper();
        Console.WriteLine($"Frase formatada: {formatada}");

        // Inverter com StringBuilder
        var sb = new StringBuilder();
        for (int i = frase.Length - 1; i >= 0; i--)
        {
            sb.Append(frase[i]);
        }
        Console.WriteLine($"Frase invertida: {sb.ToString()}");
    }
}

Passo a passo

  1. Lemos a frase do usuário com Console.ReadLine().
  2. Aplicamos Trim() para remover espaços extras e ToUpper() para converter para maiúsculas.
  3. Exibimos a frase formatada usando interpolação.
  4. Criamos um StringBuilder para montar a string invertida.
  5. Usamos um laço for que começa do último índice (frase.Length - 1) e vai até 0.
  6. A cada iteração, adicionamos o caractere atual ao StringBuilder com Append.
  7. Convertemos o StringBuilder para string com ToString() e exibimos.

Por que funciona

O StringBuilder é mais eficiente que concatenar strings dentro de um loop, pois evita criar uma nova string a cada iteração. A inversão percorre a string de trás para frente, aproveitando o indexador frase[i].

Erros comuns

  • Esquecer de converter o StringBuilder para string: Console.WriteLine(sb) funciona, mas evite depender de ToString implícito.
  • Usar frase.Length como índice inicial: causa IndexOutOfRangeException.
  • Não tratar null do ReadLine: em C# moderno, ReadLine retorna string?, mas o exemplo assume entrada não nula.

Outra forma de resolver

char[] chars = frase.ToCharArray();
Array.Reverse(chars);
string invertida = new string(chars);

Essa abordagem é mais curta, mas não usa StringBuilder. Prefira StringBuilder quando precisar montar strings dinamicamente em partes.

Saída esperada

Frase formatada: HELLO WORLD
Frase invertida: DLROW OLLEH