Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
#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
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.
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 }));
}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
Certo. Sobre undefined behavior: http://guipn.com/tac.htm#1.1
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++;
}
}
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.
Assim você teria que dar um jeito de ler letra por letra.
Espero ter ajudado.