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.
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>
#include <string.h>
int main() {
char S1[1000];
char sub[1000];
int opcao, pos, tam, i;
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;
}