Faça um programa que contenha um menu com as seguintes opçães:
Substituir a primeira ocorrência do caractere C1 da string S1 pelo caractere C2. Os caracteres C1 e C2 serão lidos pelo usuário;

Passo 1

O enunciado pede um programa em C que apresente um menu para o usuário e, numa das opções, leia uma string S1 e dois caracteres C1 e C2, substituindo na string apenas a primeira ocorrência de C1 por C2. O conteúdo principal é manipulação de strings em C, uso de laços (do/while, for), condicionais (if/switch) e funções de entrada/saída (printf, scanf, fgets).

Passo 2

Vamos estruturar o menu usando um laço do/while que se repete até o usuário escolher sair (opção 0). Dentro dele usamos switch para tratar cada escolha.

Passo 3

Para a opção de substituição, primeiro lemos a string S1 com fgets, removemos o ‘\n’ sobrando, e depois lemos C1 e C2 com scanf. Explicando: fgets lê até o ‘\n’ ou tamanho máximo, e scanf(" %c") ignora espaços em branco antes do caractere.
Em seguida usamos um laço for para percorrer S1 de índice 0 até o caractere terminal ‘\0’. A cada posição verificamos if(s1[i] == c1). Quando encontramos a primeira igualdade, atribuimos s1[i] = c2 e usamos break para sair do laço, garantindo que só a primeira ocorrência seja trocada.

Passo 4

Após a substituição, imprimimos a string resultante com printf. Se o caractere C1 não existir em S1, o for termina sem alterar nada e exibimos S1 inalterada.

Passo 5

Por fim, fechamos o switch e repetimos o menu até opção 0. A opção 0 apenas exibe mensagem de saída e encerra o programa.

Passo 6

Segue o código completo em C:

Resposta

#include <stdio.h>
#include <string.h>
int main() {
char s1[100];
char c1, c2;
int opcao;
do {
    printf("Menu:\n");
    printf("1 - Substituir primeira ocorrencia de um caractere em S1\n");
    printf("0 - Sair\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);
    getchar(); // consumir o '\n' deixado pelo scanf de opcao

    switch (opcao) {
        case 1:
            printf("Digite a string S1: ");
            fgets(s1, sizeof(s1), stdin);
            s1[strcspn(s1, "\n")] = '\0'; // remover o '\n' lido pelo fgets

            printf("Digite o caractere C1: ");
            scanf(" %c", &c1);
            printf("Digite o caractere C2: ");
            scanf(" %c", &c2);

            for (int i = 0; s1[i] != '\0'; i++) {
                if (s1[i] == c1) {
                    s1[i] = c2;
                    break; // substitui apenas a primeira ocorrencia
                }
            }

            printf("String resultante: %s\n", s1);
            getchar(); // consumir o '\n' antes de voltar ao menu
            break;

        case 0:
            printf("Saindo...\n");
            break;

        default:
            printf("Opcao invalida!\n");
            break;
    }
} while (opcao != 0);

return 0;
}

Exercícios relacionados