Faça um programa que contenha um menu com as seguintes opçães:
Retornar uma substring da string S1. Para isso o usuário deve informar a partir de qual posição deve ser criada a substring e qual é o tamanho da substring.

Passo 1

Vamos criar um programa em C que ofereça um menu para extrair uma substring de uma string S1, pedindo ao usuário a posição inicial e o tamanho da substring desejada.

Passo 2

Primeiro, precisamos incluir as bibliotecas <stdio.h> e <string.h> para entrada/saída e manipulação de strings, e declarar variáveis: uma string S1 com tamanho suficiente, inteiros para opção do menu, posição inicial e tamanho da substring, e uma string auxiliar para armazenar a substring.

Passo 3

Em seguida, construímos um laço do-while que mostre o menu com as opções “1 – Substring” e “0 – Sair”. Depois de ler a opção, usamos um switch para tratar cada caso.

Passo 4

No caso da opção 1, pedimos ao usuário a posição inicial (considerando que o usuário conta a partir de 1) e o tamanho da substring. Convertendo para índice C (posição–1), verificamos se o início e o comprimento são válidos, ou seja, se não ultrapassam o comprimento de S1 (obtido com strlen).

Passo 5

Se os parâmetros estiverem corretos, copiamos caractere a caractere a partir de S1[pos–1] para o vetor substring, até atingir o tamanho pedido, e então adicionamos o terminador ‘\0’. Por fim, exibimos a substring.

Passo 6

Se os parâmetros forem inválidos, exibimos uma mensagem de erro. Ao final, o menu volta a ser exibido até o usuário escolher “0” para sair.

Resposta

#include <stdio.h>
#include <string.h>
int main() {
char S1[1000];
char sub[1000];
int opcao, pos, tam, i;
printf("Digite a string S1: \n");
fgets(S1, sizeof(S1), stdin);
// remover '\n' lido pelo fgets, se houver
S1[strcspn(S1, "\n")] = '\0';

do {
    printf("\n=== MENU ===\n");
    printf("1 - Extrair substring de S1\n");
    printf("0 - Sair\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);

    switch (opcao) {
        case 1:
            printf("Digite a posicao inicial (1 em diante): ");
            scanf("%d", &pos);
            printf("Digite o tamanho da substring: ");
            scanf("%d", &tam);

            int len = strlen(S1);
            if (pos < 1 || pos > len || tam < 0 || pos - 1 + tam > len) {
                printf("Parametros invalidos!\n");
            } else {
                // copiar substring
                for (i = 0; i < tam; i++) {
                    sub[i] = S1[pos - 1 + i];
                }
                sub[tam] = '\0';
                printf("Substring extraida: %s\n", sub);
            }
            break;

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

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

return 0;
}

Exercícios relacionados