Sistemas Operacionais e Introdução a Programação (diário 2009-2) - Atividades para revisão dos conceitos de C - Respostas

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Manipulação de String

  • Leia uma palavra e a repita, omitindo a penúltima letra.

No programa abaixo, há duas formas de se ler a palavra do usuário:

  1. O usuário executa o programa e digita, ao lado, a palavra, passando-a como argumento.
  2. Se o usuário executou o programa sem argumentos, o programa "decidirá" por pedir-lhe a palavra:
#include <stdio.h>
#include <string.h>

int main(int argc, char * argv[])
{
	char palavra[100];
	int tamanho;
	int indice;

	// Verifica se o usuário digitou pelo menos um argumento.
	// Se sim, aproveita e copia essa informação para a variável "palavra":
	if(argc > 1)
	{
		strcpy(palavra, argv[1]);
	}
	else
	{
		// Se não digitou, pede ao usuário uma palavra nova:
		printf("Digite uma palavra: ");
		scanf("%s", palavra);
	}

	// Conta quantas letras possui a palavra - para saber qual é a penúltima :-)
	tamanho = strlen(palavra);

	// Apresenta a palavra original:
	printf("A palavra original é: %s\n", palavra);

	// Apresenta, abaixo, a palavra modificada:
	printf("A palavra sem a penúltima letra é: ");
	//
	// Se a palavra possui menos de 2 letras, mostra direto a primeira/última letra:
	if(tamanho < 2)
	{
		printf("%c\n", palavra[0]);	
	}
	else
	{
		// Caso contrário, deve-se apresentar todas as primeiras
		// letras até chegar à penúltima (sem mencioná-la)
		for(indice = 0; indice < tamanho-2; indice++)
		{
			printf("%c", palavra[indice]);
		}
		// Nesse ponto, a variável indice está indicando a posição da
		// penúltima letra. Falta apenas mostrar, na tela, a última letra,
		// que está à direita (+1):
		printf("%c\n", palavra[indice+1]);
	}
}
  • Faça o mesmo que o programa anterior, desta vez para uma frase completa: omitirá a última palavra.
#include <stdio.h>
#include <string.h>

void lerLinha(char* linha)
{
	scanf(" %[^\n]", linha);
}

int main()
{
	char frase[500];
	char * auxiliar;
	int tamanho;
	int indice;
	
	// Mais uma vez, a função auxiliar lerLinha é utilizada.
	printf("Digite uma frase: ");
	lerLinha(frase);
	
	// Apresenta a frase original.
	printf("A frase original é: %s\n", frase);

	// Procura pelo último espaço digitado. Na prática, localiza a última palavra.
	auxiliar = strrchr(frase, ' ');

	// Se auxiliar é nulo, é porque não há mais de uma palavra.
	if(auxiliar != NULL)
	{
		printf("Esta frase sem a última palavra: ");
		//
		// Conta quantos caracteres do início até a última palavra.
		tamanho = strlen(frase) - strlen(auxiliar);
		for(indice = 0; indice < tamanho; indice++)
		{
			printf("%c", frase[indice]);
		}
		// Mostra o sinal final de pontuação.
		if(frase[strlen(frase)-1] == '.' || frase[strlen(frase)-1] == '!' ||
			frase[strlen(frase)-1] == '?')
		{
			printf("%c", frase[strlen(frase)-1]);
		}
		printf("\n");
	}
	else
	{
		// Alguém quis aplicar uma pegadinha?
		printf("Há apenas uma palavra na frase ;-)\n");
	}
}

Interpretação da Entrada de Dados

  • Leia um número como parâmetro do programa e escreva-o na forma extensa.

Aplicação de Funções

  • Resolva o problema, mas desta vez utilize uma função em separado para cada dezena:
    • Uma função para converter número de 0 a 9.
    • Uma função para converter número de 10 a 19.
    • Uma função para converter número de 20 a 29.



Voltar para diário da disciplina