Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

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
  • 3 anos depois...
Postado

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 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!