Ir ao conteúdo
  • Cadastre-se

Como alterar só a primeira letra de cada palavra de uma frase para maiúscula?


Posts recomendados

Basicamente é isso pessoal:

To com dificuldades para criar um código em C que altere só a primeira letra de cada palavra de uma frase para maiúscula.

Já consegui converter tudo para minúsculo, mas agora pra buscar e encontrar a primeira letra de cada palavra, não consigo. :(

Exemplo:

Frase original: hOjE jOGuEi fuTeBol
Frase alterada: Hoje Joguei Futebol

Alguém pode me ajudar? :)

Veja:

 

#include<stdio.h> #include<stdlib.h> #include <string.h> //maiuscula strupr(string)//minuscula strlwr(string)main() {  char string[20];  printf("\n Escreva uma frase:"); gets(string); printf("\n A frase original eh: %s", string);  strlwr(string); printf("\n A frase convertida eh: %s", string); printf("\n \n"); system("pause"); return 0;}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Você pode resolver isso com os operadores bit-a-bit.

Se consultar a tabela ASCII, verá que a única diferênça entre maiúsculas e minúsculas é no quinto bit.

Logo, podemos fazer um OR do quinto bit com 1 para deixar a letra minúscla e depois um AND do quinto bit com 0 nas primeiras letras.

int main(){    int i;    char frase[20];    printf("Escreva a frase: ");    scanf("%[^\n]", frase);    for(i = 0; i < strlen(frase); i++){        frase[i] |= (1<<5);        if(!i || frase[i - 1] == ' ')            frase[i] &= ~(1<<5);    }    printf("\nFrase convertida = %s\n", frase);    return 0;}
  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Ok!

existe uma 'livraria' no c que é ótima, <ctype>;

com a declaração:

#include <ctype.h>

 

terá acesso a função tolower(int c); uma recebe o valor (letra) e maiúsculo retorna minusculo;

e a função toupper(int c);  uma recebe o valor (letra) e minusculo  retorna maiúsculo;

 

essa biblioteca tem muitas outros funções de manipulação de char muito uteis e interessantes.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Seguindo a dica do @AnsiC 

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

int main() {

    char frase[100];
    int i;

    printf("Digite uma frase: ");
    scanf("%[^\n]", frase);

    strlwr(frase);

    for (i = 0; i < strlen(frase) + 1; i++) {
        if (i == 0 || frase[i - 1] == ' ')
            frase[i] = toupper(frase[i]);
        else
            frase[i] = frase[i];
    }

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

    return 0;
}

OBS: Tópico tem uns 4 anos, então, inda tá valendo

Bem C mesmo a solução apresentada pela @olliver.soul 

Bits e Bytes 

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!