Ir ao conteúdo

Posts recomendados

Postado

Escreva um programa que leia uma string, inverta os seus caracteres todos de minúscula para maiúscula e vice versa,  e apresente o resultado no ecrã.

<#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main ()

{
    char texto [50];
    int i=0;
    
    
    printf ("Introduza uma frase: ");
    fgets (texto,50,stdin);
    
    for(i=0; texto != '\0'; i++){
        if (texto = strlwr)
                do{
                    printf ("%s",strlwr(texto));
                  }while 
    }
}>

Postado

Na tabela ASCII, as letras maisculas e minusculas estão distantes 32 posições. Então, para converter um caracterer de maisculo para minusculo e vice & versa, baster fazer um XOR com 32 (20h). Exemplo:

#include <stdio.h>



int main()
{
    char ch = getchar();
    ch = ch ^ 32; //converter de maiscula par miniscula e vice versa
    printf("%c", ch);
    return 0;
}

 

  • Curtir 1
Postado
2 minutos atrás, Flávio Pedroza disse:

Na tabela ASCII, as letras maisculas e minusculas estão distantes 32 posições. Então, para converter um caracterer de maisculo para minusculo e vice & versa, baster fazer um XOR com 32 (20h). Exemplo:


#include <stdio.h>



int main()
{
    char ch = getchar();
    ch = ch ^ 32; //converter de maiscula par miniscula e vice versa
    printf("%c", ch);
    return 0;
}

 

Mas vou ter de fazer um ciclo para ler cada caracter e saber se muda para maiuscula ou para minuscula

 

Postado
55 minutos atrás, Flávio Pedroza disse:

Tera que varrer a string e para cada caracter aplicar a operação que mencionei em cima.

 

#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main ()

{
    char texto [32];
    int i;
    
    
    printf ("Introduza uma frase: ");
    fgets (texto,50,stdin);
    
    for(i=0; texto != '\0'; i++){
    
    texto = texto ^ 32; //converter de maiscula par miniscula e vice versa
    printf("%c", texto);}
   
    
    
}

 

Postado

Vamos arrumar isso:

19 minutos atrás, Martim23 disse:

 

#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main ()

{
    char texto [32];
    int i;
    
    
    printf ("Introduza uma frase: ");
    fgets (texto,50,stdin);
    
    for(i=0; texto != '\0'; i++){
    
    texto = texto ^ 32; //converter de maiscula par miniscula e vice versa
    printf("%c", texto);}
   
    
    
}

 

#include <stdio.h>

int main (){
    char texto [50];
    int i=0;
    printf("Introduza uma frase: ");
    fgets(texto,50,stdin);
    while(texto[i] != '\0'){
        if(texto[i] > 90){
            texto[i] -= 32;
        }
        i++;
    }
    printf("%s",texto);
    return 0;
}

Primeiro que só precisa de uma biblioteca.

adicionado 2 minutos depois

Depois, no lugar do for é um while.

O if(texto > 90) testa se a letra é minúscula, se for converte para maiúscula subtraindo 32 e o texto fica todo maiúsculo.

Para deixar minúsculo é só inverter.

adicionado 3 minutos depois

E outra que tem que percorrer os índices do texto.

 

Mas se não entendeu nada, recomece, ou comece, a estudar a linguagem C e sua estrutura.

Postado
2 horas atrás, Luís Roberto C. da Silva disse:

#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
int main ()

{
    char texto [25];
    int i;
    
    
    printf ("Introduza uma frase: ");
    gets (texto);
    printf ("String original: %s\n",texto);
    
    for(i=0; texto; i++)
    
        if (islower (texto)) texto = toupper (texto);
        else if (isupper (texto)) texto = tolower(texto);
        
        printf ("string com caixa invertida:%s",texto);
        
        getch();
        return 0;    
}


#include <stdio.h>

int main (){
    char texto [50];
    int i=0;
    printf("Introduza uma frase: ");
    fgets(texto,50,stdin);
    while(texto[i] != '\0'){
        if(texto[i] > 90){
            texto[i] -= 32;
        }
        i++;
    }
    printf("%s",texto);
    return 0;
}

Primeiro que só precisa de uma biblioteca.

adicionado 2 minutos depois

Depois, no lugar do for é um while.

O if(texto > 90) testa se a letra é minúscula, se for converte para maiúscula subtraindo 32 e o texto fica todo maiúsculo.

Para deixar minúsculo é só inverter.

adicionado 3 minutos depois

E outra que tem que percorrer os índices do texto.

 

Mas se não entendeu nada, recomece, ou comece, a estudar a linguagem C e sua estrutura.

 

Postado
3 horas atrás, Luís Roberto C. da Silva disse:

Primeiro que só precisa de uma biblioteca.

adicionado 2 minutos depois

Depois, no lugar do for é um while.

O if(texto > 90) testa se a letra é minúscula, se for converte para maiúscula subtraindo 32 e o texto fica todo maiúsculo.

Para deixar minúsculo é só inverter.

 

  • Não precisa de uma biblioteca, na verdade.
  • for() while() e do{})while() podem ser usados indistintamente. Basta usar os índices de acordo.
  • Não é necessário testar minúscula ou maiúscula. Como @Flávio Pedroza mostrou, a diferença é sempre 32. Então se for uma letra basta inverter o bit 5, certo? E o operador em C para XOR é '^' como está lá no código que ele mostrou. Isso inverte o bit 5... É o significado de "ou exclusivo". Basta testar se é uma letra.
    'a' ^ 32 = 'A'
    'A' ^ 32 = 'a'

Esse trecho

    char letra = 'a';
    if (
        ((letra >= 'a') && (letra <= 'z')) ||
        ((letra >= 'A') && (letra <= 'Z'))
        ) letra = letra ^ 32;
    printf("char: '%c' char^32: '%c'\n\n", letra, letra ^ 32);
    
    letra = 'a' ^ 32;
    printf("char: '%c' char^32: '%c'\n\n", letra, letra ^ 32);
    if (
        ((letra >= 'a') && (letra <= 'z')) ||
        ((letra >= 'A') && (letra <= 'Z')) 
       ) letra = letra ^32;

    letra = '!';
    printf("(antes) char: '%c'\n", letra);
    if (
        ((letra >= 'a') && (letra <= 'z')) ||
        ((letra >= 'A') && (letra <= 'Z'))
        ) letra = letra ^ 32;
    printf("(depois) char: '%c'\n", letra);

mostra

char: 'A' char^32: 'a'

char: 'A' char^32: 'a'

(antes) char: '!'
(depois) char: '!'

O código do '!' é 33...  Você tem que testar se é uma letra porque caracteres como o '!' seriam corrompidos

 

Um pouco de história, off-topic


Ao invés de XOR com 32, a tecla Control faz AND com 32 e assim por exemplo Control+A e Control+a valem 1

 

Overhead


Chamar uma ou várias funções de biblioteca pode estar fora do enunciado. E na prática vai demorar umas 40 vezes mais pelo overhead de chamar funções... Para fazer o mesmo.

 

4 horas atrás, Martim23 disse:

Mas vou ter de fazer um ciclo para ler cada caracter e saber se muda para maiuscula ou para minuscula


Claro que tem que percorrer a string para testar as letras individualmente...

Postado
Em 18/03/2020 às 11:07, Martim23 disse:


 


#include <stdio.h>
#include <locale.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main ()

{
    char texto[32];
    int i;
    
    
    printf ("Introduza uma frase: ");
    fgets(texto, 32, stdin);
    
    for(i = 0; texto[i] != '\0'; i++){
    
    texto[i] = texto[i] ^ 32; //Expressão converter de maiscula para miniscula e vice versa
    printf("%c", texto);}
}


 

Boa noite! Realizei o que acredito ser o código original (antes de modificado pelo corretor da página).

 

Uma única falha aqui foi, se assegura de que somente os caracteres (intervalo =  ['A' ... 'z'] ) alfabéticos de intervalo fechado são os únicos atravessadores da expressão. Para tanto, tente e entenda o porquê de possível resolver acrescendo uma condição IF.

 

Ou seja, com 1x linha você resolve... "agora cuida que o filho é teu".

 

Bons Estudos!

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!