Um programa de conversão métrica. Escreva um

programa que ajude o usuário com as conversões métricas.

Seu programa deverá permitir que o usuário especifique

os nomes das unidades como strings (ou seja,

centímetros, litros, gramas, e assim por diante, para o

sistema métrico, e polegadas, quartos, libras, e assim por

diante, para o sistema inglês) e deverá responder a perguntas

simples como

“Quantas polegadas há em 2 metros?”

“Quantos litros há em 10 quartos?”

Seu programa deverá reconhecer conversões inválidas.

Por exemplo, a pergunta

“Quantos pés há em 5 quilogramas?”

não faz sentido, pois ‘pés’ são unidades de comprimento,

enquanto ‘quilogramas’ são unidades de massa.

Passo 1

Vamos usar as funções da manipulação de strings e da biblioteca de manipulação de caracteres para escrever uma função que solicita que o usuário insira um parágrafo de texto e exiba a versão desse parágrafo com palavras de gênero neutro substituindo as palavras específicas de gênero.

Primeiro, incluiremos as bibliotecas e definiremos dois arrays const char* chamados genderSpecific e genderNeutral.

Ambos os arrays armazenarão 2121 strings. Para cada palavra específica de gênero na primeira matriz, haverá uma palavra de gênero neutro equivalente no mesmo subscrito na matriz genderNeutral.

#include "stdio.h"

#include "string.h"

#include "ctype.h"

const char* genderSpecific[] = {"marido", "esposa", "bombeiro", "mão-de-obra",

"vendedor", "namorado", "namorada",

"proprietário", "policial", "congressista",

"presidente", "humanidade", "homem", "mulher",

"filha", "filho", "cara", "menina",

"menino", "pai", "mãe"};

const char* gêneroNeutral[] = {"cônjuge", "cônjuge", "bombeiro",

"força de trabalho", "vendedor", "parceiro",

"parceiro", "proprietário", "policial",

"representante", "cadeira", "humanidade",

"pessoa", "pessoa", "criança", "criança",

"amigo", "jovem", "jovem",

"pai", "pai"};

Passo 2

Na função main(), primeiro pediremos ao usuário que insira um parágrafo de texto e o armazenaremos no array de caracteres de parágrafo. Aceitaremos o parágrafo de tamanho de até 500.500 caracteres.

int main()

{

char paragraph[550] = { 0 };

int i, ch = 0;

printf("Enter a paragraph of text (^ to end):\n\n");

for (i = 0; i

scanf("%c", &ch);

if (ch != '^')

paragraph[i] = ch;

else

paragraph[i] = '\0';

}

Agora, vamos definir uma ocorrência de char* e um resto de array de caracteres.

Usaremos um loop for que itera 2121 vezes, uma vez para cada palavra específica de gênero, para substituir todas as palavras específicas de gênero do array genderSpecific por seus equivalentes de gênero neutro.

Em cada iteração, começaremos usando a função strstr() para verificar se há pelo menos uma ocorrência da palavra no parágrafo.

Se houver, faremos o ponto de ocorrência para ele e armazenaremos o resto do parágrafo (sem incluir a palavra específica de gênero) no array restante usando a função strcpy(). Para fazer isso, copiaremos a string de ocorrência para ela, mas sem os primeiros caracteres strlen(genderSpecific[i]).

char *occurrence;

char remainder[500];

for (i = 0; i

if (occurrence = strstr(paragraph, genderSpecific[i])) {

strcpy(remainder, occurrence + strlen(genderSpecific[i]));

Usaremos outra instrução if para verificar se a palavra específica de gênero faz parte de uma string maior, o que significa que não a substituiremos ou se ela está cercada por outros caracteres, exceto as letras. Usaremos a função isalpha() para isso.

Se a palavra específica de gênero não for parte de uma palavra maior, definiremos o caractere para o qual a ocorrência aponta para o caractere nulo final '\0'.

Em seguida, adicionaremos o equivalente de gênero neutro à ocorrência usando a função strcat(). Dessa forma, vamos adicioná-lo ao local onde a palavra específica de gênero costumava estar.

A única coisa que resta é adicionar o restante da string, que é armazenada no array restante.

Passo 3

Devemos agora verificar ocorrências adicionais da palavra específica de gênero atual no parágrafo.

Usaremos um loop while para isso que irá iterar enquanto a string específica de gênero for encontrada no parágrafo. No entanto, em cada iteração desse loop, verificaremos apenas a parte restante da string, para evitar a possibilidade do loop infinito.

O código usado neste loop é idêntico ao usado para substituir a primeira ocorrência da palavra.

while (occurrence =

strstr(paragraph + strlen(paragraph)

- strlen(remainder),

genderSpecific[i])) {

strcpy(remainder, occurrence +

strlen(genderSpecific[i]));

if (!isalpha(*remainder) &&

!isalpha(*(occurrence - 1))) {

*occurrence = '\0';

strcat(occurrence, genderNeutral[i]);

strcat(paragraph, remainder);

}

}

}

}

}

No final da função main(), exibiremos a string de parágrafo, que agora contém palavras de gênero neutro nos locais de seus equivalentes específicos de gênero.

printf("\n%s\n", paragraph);

}

Resposta

Ver o desenvolvimento.