Ir ao conteúdo

Posts recomendados

Postado

Fazer um programa que leia uma string e converta todos os caracteres desta string para

maiúsculo. Depois de convertida a string, exibir o resultado na tela.

Dicas: (1) Uma string de caracteres é um vetor do tipo char, terminado pelo caractere ‘\0’;

(2) O código ASCII da letra ‘a’ (minúsculo) é 97 e o código da letra ‘A’ (maiúsculo) é 65, o

código da letra ‘z’ é 122 e o código da letra ‘Z’ é 90; (3) Cuidado para não acabar

convertendo aquilo que não é nem texto e nem está em minúsculas!

Obs: nao pode usar o <string.h> ou algum parecido. Tem que usar os codigos ASCII.

Eu comecei fazendo um codigo mas nao sei o que fazer dps disso:

#include<stdio.h>


int main(){

char frase[40];
int i;
printf("Digite uma frase: ");
fgets(frase,40,stdin);








printf("%s", frase);
return 0;


}

Obg.

Postado

Veja que a diferença na tabela ASCII entre minúscula e maiúscula é de 32.

Portanto basta verificar se o carctere é >= 97 e <= 122 para efetuar a conversão e subtrair por 32.


void converte(char *v){
while(*v != '\0'){
if(*v >= 97 && *v <= 122)
*v -= 32;
v++;
}
}

int main(void){
char *texto = "teste 123";

converte(texto);

printf("Texto = %s", texto);
return 0;
}

  • Curtir 1
Postado

quando eu tento executar o programa, usando o seu codigo, o windows fala que deu um erro e o programa precisa ser fechado.

voce sabe o p q?

Postado

Troque por:


char texto[] = "teste 123";

Ou então, por:


char *texto = malloc(sizeof(char) * (strlen("teste 123") + 1) );
strcpy(texto, "teste 123");

converte(texto);

printf("Texto = %s", texto);

free(texto);

Postado

Aqui rodou normalmente.

Mas veja que eu usei ponteiro, talvez seu professor não aceite essa resolução.

Teste dessa forma,


#include <stdio.h>

int main(void){
char frase[40];
int i;

printf("Entre com o texto: ");
fgets(frase,39,stdin);

for(i = 0; frase[i] != '\0'; i++)
if(frase[i] >= 97 && frase[i] <= 122)
frase[i] -= 32;

printf("\nNovo texto: %s\n", frase);

return 0;
}

Screen,

No meu primeiro exemplo o compilar já calcula o tamanho do texto e coloca '\0' no final, certo?

Nesse caso não precisa de alocação dinâmica.

  • Confuso 1
Postado

Isso vai depender de como o compilador vai tratar a atribuição do valor para o ponteiro.

Estou usando o MinGW32 4.4.1. Ele não permitiu alteração de valor nesses casos.

Além disso, a boa prática de programação é, sempre alocar memória a ser referenciada por um ponteiro, fazendo a desalocação ao final de seu uso.

Usando dessa maneira, estará criando um código portável.

EDIT:

Sobre o "fgets()", o certo é usar o valor 40, ao invés do 39.

Como a função é de string, ela mesma fará a validação e inserirá o terminador.

Reads characters from stream and stores them as a C string into str until (num-1) characters have been read or either a newline or the end-of-file is reached, whichever happens first.

A terminating null character is automatically appended after the characters copied to str.

Fonte: cplusplus - fgets

  • Curtir 1
Postado

Screen,

O problema é tentar alterar mesmo, já que *texto será somente leitura. Por isso dá erro.

Acho que não tem problema usar dessa forma, mas uma boa práticar seria colocar const.

const char *texto = "palavra";

Assim o compilador apresentaria um warning caso alguma parte do programa tente alterar.

Mas o melhor naquele caso seria como você fez (char texto[] = "...") na forma de vetor mesmo.

  • Curtir 1
  • 6 anos depois...
Postado

@olliver.soul por que você adicionou aquela variável int i? alguém poderia explicar?

o meu objetivo é fazer esse mesmo esquema de entrar um texto e devolvê-lo maiúsculo. Só entendi o if. Não entendi o for nem o porquê da variável int i

  • 2 semanas depois...
Postado
Em 10/08/2019 às 15:30, Madson Smitt disse:

@olliver.soul por que você adicionou aquela variável int i? alguém poderia explicar?

o meu objetivo é fazer esse mesmo esquema de entrar um texto e devolvê-lo maiúsculo. Só entendi o if. Não entendi o for nem o porquê da variável int i

Usei o FOR/loop como contador para percorrer todas as letras da frase digitada.

 

A variável i é apenas um índice da posição de cada letra da frase.

 

O if é a condição para verificar na tabela ASCII se as letras estão entre 97 e 122.

 

Veja que na tabela ASCII essas são as letras minúsculas. Por tanto se alguma letra estiver nesse intervalo, é feito decremento em 32: frase -= 32.

 

Exemplo. O código decimal ASCII do a é 97 e do A é 65. Logo, para converter a para A é só tirar 32.

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!