yala neb 0 Denunciar post Postado Novembro 12, 2012 #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
DAVIFN 0 Denunciar post Postado Novembro 12, 2012 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
_Isis_ 202 Denunciar post Postado Novembro 12, 2012 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
guidjos 65 Denunciar post Postado Novembro 13, 2012 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
_Isis_ 202 Denunciar post Postado Novembro 13, 2012 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
guidjos 65 Denunciar post Postado Novembro 13, 2012 Certo. Sobre undefined behavior: http://guipn.com/tac.htm#1.1 Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Novembro 19, 2012 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