Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

yala neb

converter as letras maiusculas por minusculas..linguagem C

Recommended Posts

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main()
{
   char nome[40];
   int i;

   for(i=0;i<3;i++)
   {
       printf("\n digite nome:");
       gets(nome);

       if(isupper(nome[i]))
       {
           nome[i]=tolower(nome[i]);
       }

        else if(islower(nome[i]))
       {
           nome[i]=toupper(nome[i]);
       }
   }

   for(i=0;i<3;i++)
   {
       printf("%s",nome);
   }

   return 0;
}

 

TIPO: QUERO QUE DADA A ENTRADA DE 3 NOMES, QUE MUDE TODOS OS NOMES, ONDE TIVER MAIUSCULA MUDA PARA MINUSCULA E VICE VERSA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode criar uma função para isto. Vou dar um exemplo, ok?

 

//Criado por DAVIFN
int Qualtrocar(char Qualtrocar[40])
{
if((Qualtrocar>=64)&&(Qualtrocar<=91)//Se a letra for maiúscula...
Qualtrocar+=33;//Torna-se minúscula.
else if((Qualtrocar>=95)&&(Qualtrocar<=123))Qualtrocar-=33//Caso contrário se ela for não for símbolos, números, etc, torna-se maiúscula.
return Qualtrocar;
}

 

Assim você teria que dar um jeito de ler letra por letra.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não tá funcionando?

 

#include <stdio.h>
#include <string.h>
#include <ctype.h>

char * changeCase(char *str) {
 unsigned short size = strlen(str);
 char p[size];
 for(unsigned short i=0; i<size; i++) {
p[i] = (isupper(str[i]))? tolower(str[i]):toupper(str[i]);
 }
 return p;
}

int main(void) {
 char p[3][10] = {"JoAo", "caRlOS", "MaRiANA"};
 for(unsigned short i=0; i<3; i++)
printf("%s\n", changeCase(p[i]));
}

 

 

DAVIFN, constantes mágicas não são uma boa prática de programação. Na verdade é bom evitar mexer diretamente com tabelas de códigos desse jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cuidado com o fato de que p morre quando changeCase retorna. Referenciar o objeto morto causa undefined behavior.

 

 

#include <ctype.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   if (argc < 2) 
return 0;

   for (int i = 1; i < argc; i++)
   {
for (int j = 0; argv[i][j]; j++)
    putchar(toupper(argv[i][j]));

putchar(' ');
   }
}

 

Se quiser fazer a função, sugiro o seguinte:

 

char *strToUpper(const char *src, char *dest)
{
   size_t i = 0;

   for (; src[i]; i++)
dest[i] = toupper(src[i]);

   dest[i] = toupper(src[i]);

   return dest;
}

 

Exemplo:

 

#include <ctype.h>
#include <stdio.h>

char *strToUpper(const char *src, char *dest)
{
   size_t i = 0;

   for (; src[i]; i++)
dest[i] = toupper(src[i]);

   dest[i] = toupper(src[i]);

   return dest;
}

int main(void)
{
   puts(strToUpper("testando: um, dois.", (char [30]) { 0 }));
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gui, sei do escopo das variáveis, só lembre o povo que "comportamento indefinido" não é a mesma coisa que "erro".

Falando em comportamento indefinido, achei um post interessante: concurso do erro mais maluco gerado por comportamento indefinido

 

http://blog.regehr.org/archives/759

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é fácil basta ter em mente as características de caracteres no padrão ASCII e o conceito de ponteiros.

 

void strncase (char* s)
{
   char notcase (char c)
   {
       if((c >= 'a') && (c <= 'z'))
           return 'A' + (c - 'a');
       if((c >= 'A') && (c <= 'Z'))
           return 'a' + (c - 'A');
       return c;
   }
   while(*s != '\0')
   {
       *s = notcase(*s);
       s++;
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.